对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 Requests 基础入门
Apr 07 Python
dataframe设置两个条件取值的实例
Apr 12 Python
Python判断是否json是否包含一个key的方法
Dec 31 Python
梅尔频率倒谱系数(mfcc)及Python实现
Jun 18 Python
set在python里的含义和用法
Jun 24 Python
python rsync服务器之间文件夹同步脚本
Aug 29 Python
Python编译成.so文件进行加密后调用的实现
Dec 23 Python
python默认参数调用方法解析
Feb 09 Python
Pandas时间序列基础详解(转换,索引,切片)
Feb 26 Python
Spark处理数据排序问题如何避免OOM
May 21 Python
python实现数据结构中双向循环链表操作的示例
Oct 09 Python
如何使用python-opencv批量生成带噪点噪线的数字验证码
Dec 21 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根据一个给定范围和步进生成数组的方法
2015/06/19 PHP
PHP实现上传图片到 zimg 服务器
2016/10/19 PHP
php用xpath解析html的代码实例讲解
2019/02/14 PHP
使用EXT实现无刷新动态调用股票信息
2008/11/01 Javascript
js监听输入框值的即时变化onpropertychange、oninput
2011/07/13 Javascript
让图片旋转任意角度及JQuery插件使用介绍
2013/03/20 Javascript
jquery easyui combox一些实用的小方法
2013/12/25 Javascript
js 删除数组的几种方法小结
2014/02/21 Javascript
java、javascript实现附件下载示例
2014/08/14 Javascript
JQuery判断radio是否选中并获取选中值的示例代码
2014/10/17 Javascript
JavaScript原型及原型链终极详解
2016/01/04 Javascript
JS设计模式之单例模式(一)
2017/09/29 Javascript
Node.js引入UIBootstrap的方法示例
2018/05/11 Javascript
Vuex持久化插件(vuex-persistedstate)解决刷新数据消失的问题
2019/04/16 Javascript
微信小程序表单验证WxValidate的使用
2019/11/27 Javascript
js实现九宫格布局效果
2020/05/28 Javascript
python查看FTP是否能连接成功的方法
2015/07/30 Python
Python中标准库OS的常用方法总结大全
2017/07/19 Python
Python中变量的输入输出实例代码详解
2019/07/28 Python
10分钟教你用python动画演示深度优先算法搜寻逃出迷宫的路径
2019/08/12 Python
使用Python 自动生成 Word 文档的教程
2020/02/13 Python
如何在Python3中使用telnetlib模块连接网络设备
2020/09/21 Python
澳大利亚最便宜的网上药房:Chemist Warehouse
2020/01/30 全球购物
电子商务自荐书范文
2014/01/04 职场文书
KTV的创业计划书范文
2014/02/02 职场文书
师说教学反思
2014/02/07 职场文书
《维生素c的故事》教学反思
2014/02/18 职场文书
写好自荐信需做到的5要点
2014/03/07 职场文书
房屋鉴定委托书范本
2014/09/23 职场文书
村党支部书记四风问题个人对照检查材料思想汇报
2014/10/06 职场文书
群众路线个人自我剖析材料
2014/10/07 职场文书
异地恋情人节寄语
2015/02/28 职场文书
2015年幼儿园德育工作总结
2015/05/25 职场文书
初中军训感言
2015/08/01 职场文书
如何撰写出一份完美的商业计划书?
2019/07/12 职场文书
Python3 类型标注支持操作
2021/06/02 Python