linux开发中,通常会在进程中设置专门的信号处理方法,比如经常使用的CTRL+C,KILL等信号.如果你熟悉liunx编程,那么python等信号处理方法对你来说就很简单,下面的内容将主要介绍python 中singal包的使用.

一、signal使用实例
import signal, os

def handler(signum, frame):
print 'Signal handler called with signal', signum
raise IOError("Couldn't open device!") # Set the signal handler and a 5-second alarm
signal.signal(signal.SIGALRM, handler)
signal.alarm(5) # This open() may hang indefinitely
fd = os.open('/dev/ttyS0', os.O_RDWR) signal.alarm(0) # Disable the alarm

这段代码是python官网提供的实例代码,现在还不明白没关系,接着向下看.

二、signal定义和使用
signal包中,提供了对信号处理接口和定义的各种信号量.
sihnal.signal(signalnumhandler)接口可以向系统注册处理的信号和要处理的操作, signalnum为要处理的信号,可以为SIGNNT、SIGNQUIT等信号,hander为捕获到信号后的处理方法,可以使用signal中的默认处理标志(SIG_DFL)或者忽略(SIG_IGN).也可以自定义操作.实例如下:
#!/usr/bin/python
#coding:utf-8
import signal,os
def signal_fun(signum,frame):
print 'recv signal:%d' % signum if __name__ == '__main__':
signal.signal(signal.SIGINT, signal_fun)
signal.pause()

signal_fun接口就是接收到信号后自定义的处理方法,signal.pause()调用后,会使进程一直阻塞,直到接收到处理信号,处理完成后退出.

上面的脚本使用python sign.py运行后,会一直阻塞在signal.pause(),当输入ctrl+c后,脚本会接收到信号,然后打印信号类型,并结束运行,实际的编码过程中可以在主程序的main函数中预先注册需要处理的的信号.并使用默认的处理逻辑,满足实际的需要.使用的场景主要是:
1、设置标志让进程退出.进程在循环处理任务时不能够使用kill-9.这样会破坏进程的正常处理流程,使用kill时要等任务处理完才会退出,有时候等待的时间会比较久,因此,实际使用时,可以在接收信号后,设置进程退出标示,等当前事务处理完,判断退出标示,然后正常退出进程.
2、忽略某些信号,linux信号处理机制可以帮助我们做很多事情,但是遇到不想处理的信号时需要将其过滤,只处理需要使用的信号
 
三、定时发送信号
回到第一个问题,看如下案例:
运行脚本,脚本调用signal.alarm(5)5秒后给自身发送一个alarm信号,然后进程被阻塞,5秒后,进程收到自身给自身发送的信号,处理退出.alarm参数为0时,默认失效.
 
四、总结

signal.SIG* 各种信号表示

signal.signal(signum,frame) 注册信号

signal.pause() 堵塞信号

signal.alarm() 发送告警信号

python 信号处理的更多相关文章

  1. 使用 scipy.fft 进行Fourier Transform:Python 信号处理

    摘要:Fourier transform 是一个强大的概念,用于各种领域,从纯数学到音频工程甚至金融. 本文分享自华为云社区<使用 scipy.fft 进行Fourier Transform:P ...

  2. Python 信号处理 signal 模块

    Table of Contents 1. signal模块简介 1.1. signal简单示例 1.2. signal说明 1.2.1. 基本的信号名 1.2.2. 常用信号处理函数 2. signa ...

  3. 用GDB排查Python程序故障

        某Team在用Python开发一些代码,涉及子进程以及设法消除僵尸进程的需求.实践中他们碰上Python程序非预期退出的现象.最初他们决定用GDB调试Python解释器,查看exit()的源头 ...

  4. python学习笔记——信号模块signal

    基于python学习笔记——多进程间通信——Linux信号基础的学习基础,进一步学习Python标准库中的signal模块. 尽管signal是python中的模块,但是主要针对UNIX平台(比如Li ...

  5. Python网络编程(进程通信、信号、线程锁、多线程)

    什么是进程通讯的信号? 用过Windows的我们都知道,当我们无法正常结束一个程序时, 可以用任务管理器强制结束这个进程,但这其实是怎么实现的呢? 同样的功能在Linux上是通过生成信号和捕获信号来实 ...

  6. 处理python中的信号

    什么是信号 信号(signal)-- 进程间通讯的一种方式,也可作为一种软件中断的方法.一个进程一旦接收到信号就会打断原来的程序执行来按照信号进行处理. 简化术语,信号是一个事件,用于中断运行功能的执 ...

  7. 用Python进行语音信号处理

    1.语音信号处理之时域分析-音高追踪及其Python实现 2.语音信号处理之时域分析-音高及其Python实现 参考: 1.NumPy

  8. Python中的音频和数字信号处理(DSP)

    翻译自Python For Engineers. 1. 创建一个正弦波 在这个项目中,我们将创建一个正弦波,并将其保存为wav文件. 但在此之前,你应该知道一些理论. 频率:频率是正弦波重复一秒的次数 ...

  9. python做语音信号处理

    音频信号的读写.播放及录音 标准的python已经支持WAV格式的书写,而实时的声音输入输出需要安装pyAudio(http://people.csail.mit.edu/hubert/pyaudio ...

随机推荐

  1. HTML5之Canvas画正方形

    HTML5之Canvas画正方形 1.设计源码 <!DOCTYPE html> <head> <meta charset="utf-8" /> ...

  2. CF370 D Memory and Scores

    dp题 并运用了前缀和 我看题目提示中有fft 我想了下感觉复杂度不过关还是未解 #include<bits/stdc++.h> using namespace std; typedef ...

  3. Java 第三章 选择结构

    第三章   选择结构 if基本语法: if(条件){// 表达式 // 代码块 } eg: int a = 10; if(a > 1){ System.out.println("内容& ...

  4. 基于puppet分布式集群管理公有云多租户的架构浅谈

    基于puppet分布式集群管理公有云多租户的架构浅谈 一.架构介绍   在此架构中,每个租户的业务集群部署一台puppet-master作为自己所在业务集群的puppet的主服务器,在每个业务集群所拥 ...

  5. [CQOI2007]余数求和

    大于k的部分直接加k 对于小于等于k的cnt个数 ans=cnt*k - Σ(k/i * i) 然后k/i在一段区间内不变,这段区间直接可以数列求和 # include <bits/stdc++ ...

  6. 【learning】一种奇妙的网络流建模方式

    吐槽 好吧这个是真的很妙qwq用来解方程组的网络流嗯不能更清真 正题 首先是大概描述 当一个方程组中所有的方程相加之后可以把所有的变量都消掉(也就是所有变量都出现一正一负可以抵消掉),我们会发现这个其 ...

  7. RPC vs RESTful

    在微服务中,使用什么协议来构建服务体系,一直是个热门话题. 争论的焦点集中在两个候选技术: (binary) RPC or Restful. 以Apache Thrift为代表的二进制RPC,支持多种 ...

  8. Solidity调试 - 实现变量打印

    Solidity没有print或console.log方法可以用来打印变量,这会给我们调试程序增加难度. Solidity有event功能,可以在event中记录变量信息,通过调用event方法也可以 ...

  9. Android Screen Monito

    1.下载 Android Screen Monitor http://code.google.com/p/android-screen-monitor/ (1) 下載 ASM_2_40.zip 并解压 ...

  10. 深入理解Java虚拟机到底是什么

    摘自:http://blog.csdn.net/zhangjg_blog/article/details/20380971 什么是Java虚拟机 我们都知道Java程序必须在虚拟机上运行.那么虚拟机到 ...