对Python信号处理模块signal详解

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详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Python3.X 线程中信号量的使用方法示例

    前言 最近在学习python,发现了解线程信号量的基础知识,对深入理解python的线程会大有帮助.所以本文将给大家介绍Python3.X线程中信号量的使用方法,下面话不多说,来一起看看详细的介绍: 方法示例 线程中,信号量主要是用来维持有限的资源,使得在一定时间使用该资源的线程只有指定的数量 # -*- coding:utf-8 -*- """ Created by FizLin on 2017/07/23/-下午10:59 mail: https://github.com

  • python之线程通过信号pyqtSignal刷新ui的方法

    第一部分:UI界面设计 界面效果图如下: ui文件(可拉动控件自行创建一个button和text) <?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> <class>Dialog</class> <widget class="QDialog" name="Dialog"> <pr

  • Python中常用信号signal类型实例

    本文研究的主要是Python中的Signal 信号的相关内容,具体如下. 常用信号类型 SIGINT 终止进程 中断进程,不可通过signal.signal()捕捉(相当于Ctrl+C) SIGTERM 终止进程 软件终止信号,可通过signal.signal()捕捉(默认信号,当os.kill()没有指明信号类型时,默认的是该信号) SIGKILL 终止进程 杀死进程,不可捕捉(相当于linux下的kill命令,windows下使用会抛出异常) SIGALRM 闹钟信号 可以通过signal.

  • python使用多线程不断刷新网页的方法

    本文实例讲述了python使用多线程不断刷新网页的方法.分享给大家供大家参考.具体如下: 这段代码可以开通过个线程不断刷新指定的页面,可用于刷票,增加网页访问量等等,不用再去按F5了 import thread import urllib2 import sys import time def usage(): print 'Usage: python ' + sys.argv[0] + ' <url> <threads>' sys.exit() def reloader(numt

  • 对Python信号处理模块signal详解

    Python中对信号处理的模块主要是使用signal模块,但signal主要是针对Unix系统,所以在Windows平台上Python不能很好的发挥信号处理的功能. 要查看Python中的信号量,可以使用dir(signal)来查看. signal.signal() 在signal模块中,主要是使用signal.signal()函数来预设信号处理函数 singnal.signal(signalnum, handler) 其中第一个参数是信号量,第二个参数信号处理函数. 下面看个简单的例子,其中

  • python日志模块loguru详解

    目录 前言 使用步骤 安装库 简单使用方法 配置 异常追溯 总结 前言 在部署一些定时运行或者长期运行的任务时,为了留存一些导致程序出现异常或错误的信息,通常会才用日志的方式来进行记录这些信息.python内置的logging标准库博主是没用过,今天给大家介绍loguru,loguru 库的使用可以说是十分简单,希望通过本文大家再也不用通过print来排查代码了. 使用步骤 安装库 pip install loguru 简单使用方法 from loguru import logger logge

  • python调试模块ipdb详解

    目录 1. 调试python 1.1 使用ipdb 1.2 常用命令 1. 调试python ipdb是用来python中用以交互式debug的模块,可以直接利用pip安装; 其功能类似于pycharm中 python控制台,而使用ipdb 的优点,便是直接在代码中调试,避免了在python控制台,或者重新设置一些简单变量. pip install ipdb 1.1 使用ipdb 当程序运行到ipdb.set_trace()的地方会自动进入debug模式. for i in range(5):

  • Python OS模块实例详解

    本文实例讲述了Python OS模块.分享给大家供大家参考,具体如下: os模块 在自动化测试中,经常需要查找操作文件,比如查找配置文件(从而读取配置文件的信息),查找测试报告等等,经常会对大量文件和路径进行操作,这就需要依赖os模块. 1. os.getcwd() 功能:查看当前所在路径 import os print(os.getcwd()) 2. os.listdir() 列举目录下所有的文件,返回的是列表类型 import os print(os.listdir("c:\file&quo

  • Python伪随机数模块random详解

    目录 random模块 random.seed 常用整数随机函数 常用序列随机函数 常用实数随机函数 总结 random模块 该模块实现了各种分布的伪随机数生成器.(包括在实数轴上计算均匀.正态(高斯).对数正态.负指数.伽马和贝塔分布的函数)不应将此模块的伪随机生成器用于安全目的.有关安全性或加密用途,请使用secrets模块. 关于random模块的更多详细内容,请参考官方文档random — 生成伪随机数 下面列举一下该模块常用的功能. random.seed random.seed(a=

  • Python Deque 模块使用详解

    创建Deque序列: from collections import deque d = deque() Deque提供了类似list的操作方法: d = deque() d.append('1') d.append('2') d.append('3') len(d) d[0] d[-1] 输出结果: 3 '1' '3' 两端都使用pop: d = deque('12345') len(d) d.popleft() d.pop() d 输出结果: 5 '1' '5' deque(['2', '3

  • python logging日志模块的详解

    python logging日志模块的详解 日志级别 日志一共分成5个等级,从低到高分别是:DEBUG INFO WARNING ERROR CRITICAL. DEBUG:详细的信息,通常只出现在诊断问题上 INFO:确认一切按预期运行 WARNING:一个迹象表明,一些意想不到的事情发生了,或表明一些问题在不久的将来(例如.磁盘空间低").这个软件还能按预期工作. ERROR:更严重的问题,软件没能执行一些功能 CRITICAL:一个严重的错误,这表明程序本身可能无法继续运行 这5个等级,也

  • Python安装依赖(包)模块方法详解

    Python模块,简单说就是一个.py文件,其中可以包含我们需要的任意Python代码.迄今为止,我们所编写的所有程序都包含在单独的.py文件中,因此,它们既是程序,同时也是模块.关键的区别在于,程序的设计目标是运行,而模块的设计目标是由其他程序导入并使用. 不是所有程序都有相关联的.py文件-比如说,sys模块就内置于Python中,还有些模块是使用其他语言(最常见的是C语言)实现的.不过,Python的大多数库文件都是使用Python实现的,因此,比如说,我们使用了语句import coll

  • Python图像处理库PIL的ImageGrab模块介绍详解

    ImageGrab模块用于将当前屏幕的内容或者剪贴板上的内容拷贝到PIL图像内存. 当前版本只支持windows系统. 一.ImageGrab模块的函数 1.  Grab 定义:ImageGrab.grab()⇒ image ImageGrab.grab(bbox) ⇒ image 含义:(New in 1.1.3)抓取当前屏幕的快照,返回一个模式为"RGB"的图像.参数边界框用于限制只拷贝当前屏幕的一部分区域. 例子: >>> from PIL importImag

  • Python图像处理库PIL的ImageDraw模块介绍详解

    ImageDraw模块提供了图像对象的简单2D绘制.用户可以使用这个模块创建新的图像,注释或润饰已存在图像,为web应用实时产生各种图形. PIL中一个更高级绘图库见The aggdraw Module 一.ImageDraw模块的概念 1.  Coordinates 绘图接口使用和PIL一样的坐标系统,即(0,0)为左上角. 2.  Colours 为了指定颜色,用户可以使用数字或者元组,对应用户使用函数Image.new或者Image.putpixel.对于模式为"1","

随机推荐