对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使用正则表达式抓取网页图片的方法示例
Apr 21 Python
python不换行之end=与逗号的意思及用途
Nov 21 Python
Python一句代码实现找出所有水仙花数的方法
Nov 13 Python
python实现抽奖小程序
Apr 15 Python
DataFrame.to_excel多次写入不同Sheet的实例
Dec 02 Python
pytorch实现从本地加载 .pth 格式模型
Feb 14 Python
python要安装在哪个盘
Jun 15 Python
Python list和str互转的实现示例
Nov 16 Python
利用Python将多张图片合成视频的实现
Nov 23 Python
python 实现socket服务端并发的四种方式
Dec 14 Python
jupyter notebook更换皮肤主题的实现
Jan 07 Python
Python OpenCV超详细讲解读取图像视频和网络摄像头
Apr 02 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面向对象全攻略 (十) final static const关键字的使用
2009/09/30 PHP
对PHP新手的一些建议(PHP学习经验总结)
2014/08/20 PHP
PHP使用get_headers函数判断远程文件是否存在的方法
2014/11/28 PHP
php实现的SSO单点登录系统接入功能示例分析
2016/10/12 PHP
php curl 模拟登录并获取数据实例详解
2016/12/22 PHP
php mysql操作mysql_connect连接数据库实例详解
2016/12/26 PHP
动态的绑定事件addEventListener方法的使用
2014/01/24 Javascript
JS获取select的value和text值的简单实例
2014/02/26 Javascript
简介JavaScript中的setHours()方法的使用
2015/06/11 Javascript
js控件Kindeditor实现图片自动上传功能
2020/07/20 Javascript
JS常用字符串方法(推荐)
2021/01/15 Javascript
AngularJS学习第一篇 AngularJS基础知识
2017/02/13 Javascript
JavaScript两个变量交换值的实现方法
2017/03/01 Javascript
简单实现js轮播图效果
2017/07/14 Javascript
Vue resource中的GET与POST请求的实例代码
2017/07/21 Javascript
nginx配置React静态页面的方法教程
2017/11/03 Javascript
vue权限管理系统的实现代码
2019/01/17 Javascript
vue项目打包后怎样优雅的解决跨域
2019/05/26 Javascript
jQuery实现带进度条的轮播图
2020/09/13 jQuery
浅析我对JS延迟异步脚本的思考
2020/10/12 Javascript
使用Py2Exe for Python3创建自己的exe程序示例
2018/10/31 Python
解决django后台样式丢失,css资源加载失败的问题
2019/06/11 Python
Python3和pyqt5实现控件数据动态显示方式
2019/12/13 Python
Python控制台输出时刷新当前行内容而不是输出新行的实现
2020/02/21 Python
浅谈sklearn中predict与predict_proba区别
2020/06/28 Python
SmartBuyGlasses意大利:购买太阳镜、眼镜和隐形眼镜
2018/11/20 全球购物
英国书籍、CD、DVD和游戏的第一道德零售商:Awesome Books
2020/02/22 全球购物
大学生毕业自我鉴定范文
2013/09/19 职场文书
内容编辑个人求职信
2013/12/10 职场文书
农村婚礼证婚词
2014/01/10 职场文书
护士毕业实习感言
2014/03/05 职场文书
厨房管理计划书
2014/04/27 职场文书
2019新员工试用期转正工作总结范文
2019/08/21 职场文书
CentOS8.4安装Redis6.2.6的详细过程
2021/11/20 Redis
python playwright 自动等待和断言详解
2021/11/27 Python
Python与C++中梯度方向直方图的实现
2022/03/17 Python