signal的运用

signal的运用

ID:37711694

大小:33.50 KB

页数:4页

时间:2019-05-29

signal的运用_第1页
signal的运用_第2页
signal的运用_第3页
signal的运用_第4页
资源描述:

《signal的运用》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、signal的运用第一:给耗时操作增加统一的TimeOut超时处理机制无论是否启用了Python的多线程机制,只要利用signal模块就可以为耗时操作增加统一的超时处理机制(当然在使用了多线程的情况下还是有一些不一样的地方,只有在主线程里面才可以调用signal.signal函数,而子线程可以调用signal.alarm函数对信号的状态进行设置,具体需参照signal模块自身文档)。单线程情况下,可直接参考如下示例: Code:importsignaldefhandler(signum,frame):print'Signalhandlercalledwithsignal',signumra

2、iseTimeOutError,"TimeOut!"try:#Setthesignalhandleranda1-secondalarmsignal.signal(signal.SIGALRM,handler)signal.alarm(1)#ThiswhileloophangindefinitelywhileTrue:print'a',signal.alarm(0)#Disablethealarmexcept:printprint'Timeoutcaught!'第二:pythonkill信号处理(优雅关闭服务器)我们可能使用nohup或者自己写一个在后台运行的daemon,然后关闭的时候使用

3、kill命令。但是我们有时候需要在关闭服务器之前做一些事情,比如回收一些资源,关闭数据库连接池等,要实现优雅的关闭服务器,就需要对kill的信号进行处理,python的信号处理用到signal模块。看下面的例子:Code:importsignalimporttimeimportsysimportthreading#想捕捉的信号编号signum=int(sys.argv[1])classThreadTest(threading.Thread):def__init__(self):threading.Thread.__init__(self)defrun(self):whileTrue:pri

4、nt"iamok"time.sleep(1)defmyhandle(signum=0,e=0):"""处理信号的函数"""print'iwillkillmyself'print'receivesignal:%dat%s'%(signum,str(time.ctime(time.time())))sys.exit()if__name__=="__main__":signal.signal(signum,myhandle)tt=ThreadTest()tt.start()whileTrue:time.sleep(1)上面的例子接受一个参数,是要捕捉的信号,里面是模拟一个多线程的服务器。下面用n

5、ohup启动:nohuppythonsignal_test.py15&我们监听的是15,也就是kill<进程号>默认的值,然后打开看日志:tail-fnohup.out接着3秒后关闭服务器:kill91943日志里面就会打印出记录:iamokiamokiamokiwillkillmyselfreceivesignal:15atThuAug517:25:352010注意kill-9<进程号>程序是不能处理9这个的,9是强制关闭程序。除了15之外,如果15被系统用了,你也可以选择其他的使用。可以通过kill-l来列出所有的信号,如下: Code:$kill-l1)SIGHUP2)SIGINT3

6、)SIGQUIT4)SIGILL5)SIGTRAP6)SIGABRT7)SIGEMT8)SIGFPE9)SIGKILL10)SIGBUS11)SIGSEGV12)SIGSYS13)SIGPIPE14)SIGALRM15)SIGTERM16)SIGURG17)SIGSTOP18)SIGTSTP19)SIGCONT20)SIGCHLD21)SIGTTIN22)SIGTTOU23)SIGIO24)SIGXCPU25)SIGXFSZ26)SIGVTALRM27)SIGPROF28)SIGWINCH29)SIGINFO30)SIGUSR131)SIGUSR2sys.exit()是会清理才退出的,在某

7、些多线程情况下如果不行的话就使用os.abort(),这个是强制退出。from:http://www.sugarsfree.org/?p=179补充:POSIX.1中列出的信号:信号值处理动作发出信号的原因----------------------------------------------------------------------SIGHUP1A终端挂起或者控制进程终止SIGINT2A键盘中断(如break

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。