对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两种遍历字典(dict)的方法比较
May 29 Python
用PyQt进行Python图形界面的程序的开发的入门指引
Apr 14 Python
python数据类型判断type与isinstance的区别实例解析
Oct 31 Python
Tensorflow实现卷积神经网络用于人脸关键点识别
Mar 05 Python
Python中实现变量赋值传递时的引用和拷贝方法
Apr 29 Python
Python3中的最大整数和最大浮点数实例
Jul 09 Python
django ModelForm修改显示缩略图 imagefield类型的实例
Jul 28 Python
pyhton中__pycache__文件夹的产生与作用详解
Nov 24 Python
使用tensorflow DataSet实现高效加载变长文本输入
Jan 20 Python
Python2和Python3中@abstractmethod使用方法
Feb 04 Python
解决python 输出到csv 出现多空行的情况
Mar 24 Python
Python 绘制多因子柱状图
May 11 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 Undefined index的问题
2009/06/01 PHP
php数组函数序列之array_intersect() 返回两个或多个数组的交集数组
2011/11/10 PHP
php生成gif动画的方法
2015/11/05 PHP
[JS]点出统计器
2020/10/11 Javascript
一段批量给页面上的控件赋值js
2010/06/19 Javascript
离开页面时检测表单元素是否被修改,提示保存的js代码
2010/08/25 Javascript
结合JQ1.9通过js正则判断各种浏览器版本的方法
2013/12/30 Javascript
jquery仿搜索自动联想功能代码
2014/05/23 Javascript
jQuery对指定元素中指定字符串进行替换的方法
2015/03/17 Javascript
招聘网站基于jQuery实现自动刷新简历
2015/05/10 Javascript
node.js require() 源码解读
2015/12/13 Javascript
理解Angular数据双向绑定
2016/01/10 Javascript
jQuery中的each()详细介绍(推荐)
2016/05/25 Javascript
jQuery validata插件实现方法
2017/06/25 jQuery
vue中阻止click事件冒泡,防止触发另一个事件的方法
2018/02/08 Javascript
基于node搭建服务器,写接口,调接口,跨域的实例
2018/05/13 Javascript
详解mpvue开发小程序小总结
2018/07/25 Javascript
vue-router重定向和路由别名的使用讲解
2019/01/19 Javascript
vue-router 起步步骤详解
2019/03/26 Javascript
详细分析React 表单与事件
2020/07/08 Javascript
vue项目中使用rem,在入口文件添加内容操作
2020/11/11 Javascript
vue中如何添加百度统计代码
2020/12/19 Vue.js
python简单商城购物车实例代码
2018/03/15 Python
Python基于pyCUDA实现GPU加速并行计算功能入门教程
2018/06/19 Python
Python 中字符串拼接的多种方法
2018/07/30 Python
详解如何在Apache中运行Python WSGI应用
2019/01/02 Python
python opencv实现图像边缘检测
2019/04/29 Python
Python作用域与名字空间原理详解
2020/03/21 Python
用 python 进行微信好友信息分析
2020/11/28 Python
加拿大便宜的隐形眼镜商店:Clearly
2016/09/15 全球购物
国际性能运动服装品牌:Dare 2b
2018/07/27 全球购物
宝拉珍选英国官网:Paula’s Choice英国
2019/05/29 全球购物
工作违纪检讨书
2014/02/17 职场文书
水利公司纪检监察自我鉴定
2014/02/25 职场文书
创业培训计划书
2014/05/03 职场文书
党支部书记四风问题整改措施
2014/09/24 职场文书