对Python信号处理模块signal详解


Posted in Python onJanuary 09, 2019

Python中对信号处理的模块主要是使用signal模块,但signal主要是针对Unix系统,所以在Windows平台上Python不能很好的发挥信号处理的功能。

要查看Python中的信号量,可以使用dir(signal)来查看。

signal.signal()

在signal模块中,主要是使用signal.signal()函数来预设信号处理函数

singnal.signal(signalnum, handler)

其中第一个参数是信号量,第二个参数信号处理函数。

下面看个简单的例子,其中

定义了一个信号处理函数signal_handler(),用来处理程序接收到信号时执行的操作

一段循环等待发送信号

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import signal
import time

def signal_handler(signum, frame):
  print('Received signal: ', signum)

while True:
  signal.signal(signal.SIGHUP, signal_handler) # 1
  signal.signal(signal.SIGINT, signal_handler) # 2
  signal.signal(signal.SIGQUIT, signal_handler) # 3
  signal.signal(signal.SIGALRM, signal_handler) # 14
  signal.signal(signal.SIGTERM, signal_handler) # 15
  signal.signal(signal.SIGCONT, signal_handler) # 18
  while True:
    print('waiting')
    time.sleep(1)

运行上面的程序

python test.py

然后另外开一个终端,找到对应的进程,并执行下面的kill操作

kill -1 <pid>
kill -2 <pid>
kill -3 <pid>
kill -14 <pid>
kill -15 <pid>
kill -18 <pid>
kill -9 <pid> # 最后杀死进程

此时可以看到test.py的输出,打印的就是具体接收到的信号。

这里注意一点就是程序中注册了SIGINT信号,所以在运行程序后使用CTRL+C并不能结束进程,而是仍然打印进程接收到的信号。

signal.alarm()

另外,signal模块提供了一个很有用的函数signal.alarm(),它用于在一定时间后向进程自身发送SIGALRM信号,比如下面的例子设置5秒后向自己发送一个SIGALRM信号。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import signal
import time

def signal_handler(signum, frame):
  print('Received signal: ', signum)

while True:
  signal.signal(signal.SIGALRM, signal_handler) # 14
  signal.alarm(5)
  while True:
    print('waiting')
    time.sleep(1)

以上这篇对Python信号处理模块signal详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python多线程经典问题之乘客做公交车算法实例
Mar 22 Python
详解Python之数据序列化(json、pickle、shelve)
Mar 30 Python
Python File readlines() 使用方法
Mar 19 Python
Python实现的求解最大公约数算法示例
May 03 Python
pycharm 将django中多个app放到同个文件夹apps的处理方法
May 30 Python
python得到单词模式的示例
Oct 15 Python
pycham查看程序执行的时间方法
Nov 29 Python
Opencv-Python图像透视变换cv2.warpPerspective的示例
Apr 11 Python
在Pandas中处理NaN值的方法
Jun 25 Python
python basemap 画出经纬度并标定的实例
Jul 09 Python
Python安装Bs4的多种方法
Nov 28 Python
Python简易开发之制作计算器
Apr 28 Python
使用python实现语音文件的特征提取方法
Jan 09 #Python
对python中Librosa的mfcc步骤详解
Jan 09 #Python
Python中的枚举类型示例介绍
Jan 09 #Python
利用python提取wav文件的mfcc方法
Jan 09 #Python
Python Matplotlib库安装与基本作图示例
Jan 09 #Python
对Python使用mfcc的两种方式详解
Jan 09 #Python
Python中的 enum 模块源码详析
Jan 09 #Python
You might like
php建立Ftp连接的方法
2015/03/07 PHP
php微信开发之音乐回复功能
2018/06/14 PHP
关于Laravel参数验证的一些疑与惑
2019/11/19 PHP
TNC vs IO BO3 第一场2.13
2021/03/10 DOTA
JavaScript 图片预览效果 推荐
2009/12/22 Javascript
js DataSet数据源处理代码
2010/03/29 Javascript
Jquery+ajax请求data显示在GridView上(asp.net)
2010/08/27 Javascript
BootStrap响应式导航条实例介绍
2016/05/06 Javascript
JavaScript实现移动端滑动选择日期功能
2016/06/21 Javascript
JavaScript实现星星等级评价功能
2017/03/22 Javascript
fetch 使用及如何接收JS传值
2017/11/11 Javascript
微信小程序实现页面浮动导航
2019/01/28 Javascript
解决Idea、WebStorm下使用Vue cli脚手架项目无法使用Webpack别名的问题
2019/10/11 Javascript
javascript事件循环event loop的简单模型解释与应用分析
2020/03/14 Javascript
使用Python脚本将Bing的每日图片作为桌面的教程
2015/05/04 Python
Python及PyCharm下载与安装教程
2017/11/18 Python
python中的迭代和可迭代对象代码示例
2017/12/27 Python
Python socket实现的文件下载器功能示例
2019/11/15 Python
python爬虫之遍历单个域名
2019/11/20 Python
Python实现图片识别加翻译功能
2019/12/26 Python
使用python自动追踪你的快递(物流推送邮箱)
2020/03/17 Python
Python爬虫获取页面所有URL链接过程详解
2020/06/04 Python
如何用python爬取微博热搜数据并保存
2021/02/20 Python
Bose英国官方网站:美国知名音响品牌
2020/01/26 全球购物
小米官方旗舰店:Xiaomi
2020/08/07 全球购物
大学应届毕业生个人求职信
2013/09/23 职场文书
函授大专自我鉴定
2013/11/01 职场文书
毕业生的自我评价
2013/12/30 职场文书
2014年连锁店圣诞节活动方案
2014/12/09 职场文书
数学教师个人总结
2015/02/06 职场文书
2015年学校德育工作总结
2015/04/22 职场文书
借钱欠条怎么写
2015/07/03 职场文书
2015年教师党员个人总结
2015/11/24 职场文书
《草船借箭》教学反思
2016/02/23 职场文书
python 如何获取页面所有a标签下href的值
2021/05/06 Python
SQL Server使用导出向导功能
2022/04/08 SQL Server