python signal模块作用_如何理解python中信号Signal?
信号signal 是python进程间进行信号发送的一种机制,其原理是操作系统对进程的控制,是一种程序中断一个进程一旦接收到信号就会打断原来的程序执行流程来处理信号。
那么singanl到底有什么用呢?
siganl的应用:
1. 故障定位技术(进程的底层故障,例如进程突然中断和一些可能性较小的故障)
2. 对进程的流程控制
首先说说与信号signal有关的几个函数
(1)os.kill(pid,sig)
发送一个信号给某个进程
参数解析:
pid 指定发送信号的进程号
sig 要发送的信号代号(需要通过signal模块获取)
(2)signal.alarm(sec) 非阻塞函数
设置时钟信号,在一定时间后给自身发送一个SIGALRM信号
原理: 时钟的创建是进程交由操作系统内核(kernal)帮助创建的
时钟和进程之间是异步执行的,当时钟到时,内核会发送信号给进程,进程接收信号进行相应的响应操作.这就是所谓的python异步处理方案.
后面的时钟会覆盖前面的时钟,一个进程只有一个挂起的时钟
名词的理解:
异步: 程序在执行中利用内核功能帮助完成必要的辅助操作,不影响应用层持续执行
注意: 这里的同步和异步机制是相对多进程而言的.(注意与多线程的异步执行相区分,之后我会写写多线程的异步机制的相关文章)
在进程中通信这个概念下,只有singal是异步执行的,另外python进程间通信的机制还有pipe(管道),queue(队列),value(共享空间)等等
有机会会将这几种机制进行一个对比
(3)signal.pause()
阻塞进程,等待一个信号.当接收到信号时就会停止阻塞
例如:等待signal()函数的发送
(4)signal.signal(sig,handler)
当进程运行过程中出现故障异常或者需要进程间通信时,操作系统内核/进程发出处理信号
参数理解:
sig 要处理的信号名称
handler 信号处理方法 可选值: SIG_DFL 表示默认方法处理
SIG_IGN 表示忽略这个信号(一般为了避免父进程和子进程的互相干扰而使用)
func 自定义函数(实际上是回调函数的一类,信号发生时,调用处理函数,完成之后,回到原来的位置继续执行下面的程序)
自定义函数格式: (跟定义python普通函数的定义没有区别)
def func(sig,frame):
sig : 接收到的信号
frame: 信号结构对象(可以通过结构对象查看信号信息,基本不用)
signal函数实际上是一个异步处理函数,只要执行了该函数,则进程任意时候接收到相应信号都会处理
这里的异步就是上文提到的异步机制,是计算机内核程序与本进程间同时运行,互相不干扰的一种机制,对于进程的正常执行有着关键的作用。
这种异步机制在任何后端编程语言中都是存在的,只不过实现的方式和细节不一样而已。
那么singnal怎么用呢?
一般信号signal是在需要检测异常的程序的开头就定义好了,程序顺序向下运行时,一旦捕获到操作系统发出的signal或者其他进程发出的signal
马上就会停止当前的程序运行状态,去处理捕获到的signal。
python signal模块作用_如何理解python中信号Signal?相关推荐
- python sys模块作用_浅谈Python中的模块
模块 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式.在Python中,一个.py文件就称之为一个模块(Mod ...
- python中装饰器的作用_如何理解Python装饰器
展开全部 理解Python中的装饰器 @makebold @makeitalic def say(): return "Hello" 打印出如2113下的输出: Hello 你会怎 ...
- 如何用python写数值运算_如何理解Python的数值运算?
1 基本算术运算 1.1 使用规则 – Python解析器相当于一个简单的计算器 – Python解析器可以接受简单的算术表达式 – 运算符可以使加(+)减(-)乘(*)除(/) 1.2 实操理解 # ...
- python装饰器由浅入深_由浅入深理解Python装饰器
前提知识: 1.Python里函数也是一种对象: def shout(word="yes"): return word.capitalize()+"!" pri ...
- 简述python解释器的作用_什么是python解释器?
当我们编写Python代码时,我们得到的是一个包含Python代码的以.py为扩展名的文本文件.要运行代码,就需要Python解释器去执行.py文件. 由于整个Python语言从规范到解释器都是开源的 ...
- java虚引用作用_深入理解Java中的引用(二)——强软弱虚引用
深入理解Java中的引用(二)--强软弱虚引用 在上一篇文章中介绍了Java的Reference类,本篇文章介绍他的四个子类:强引用.软引用.弱引用.虚引用. 强引用(StrongReference) ...
- python画爱心原理_如何理解python一行代码实现一个爱心字符画?
前言 python中有个很酷的效果,一行代码实现一个爱心字符,虽说是一行代码,但是理解起来还是比较难的,括号太多,并且使用了python的一些快捷小技巧.比如三元表达式,列表生成式,字符串拼接以及一个 ...
- python添加模块路径_(转)为Python添加默认模块搜索路径
原文出处:https://www.douban.com/note/334738164/ 方法一:函数添加 1 import sys 2 查看sys.path 3 添加sys.path.append(& ...
- python导入模块介绍_详解Python模块导入方法
python常被昵称为胶水语言,它能很轻松的把用其他语言制作的各种模块(尤其是C/C++)轻松联结在一起.python包含子目录中的模块方法比较简单,关键是能够在sys.path里面找到通向模块文件的 ...
最新文章
- mysql平滑关闭_MySQL平滑删除数据的小技巧
- IBM等创建开放虚拟化联盟对抗VMware
- HDU - 1429 胜利大逃亡(续) (BFS+状压)
- Maximum Subsequence Value CodeForces - 1365E(规律+暴力)
- 猿课python 第三天
- php封装webservice_四种php中webservice实现的简单架构方法及实例
- 他一口气写出了这7k字的红黑树总结!看过的都说好!!|文末送书
- 如何给影像添加投影_地面互动投影是如何实现的,需要哪些设备?
- javascript创建DOM元素(标签script)并追加到title标签中
- oracle循环不是a就取b,oracle数据库试题的.doc
- MySQL DEBUG_SYNC 的简单分析与测试
- 【操作系统】处理机调度-思维导图
- iphone-common-codes-ccteam源代码 CCCommon.h
- 洛谷P1217回文质数(特判筛选,取巧判断顺序)
- Orange:一个基于 Python 的数据挖掘和机器学习平台
- 05 无人机动态模型
- 多可文档管理的数据备份
- nacos整合springmvc:解决使用@Value或@NacosValue无法从nacos配置中心动态获取最新配置数据问题
- SpringMVC(三)——响应
- 2021年中国电商市场的9大趋势预测