對Python信號處理模塊signal詳解
Python中對信號處理的模塊主要是使用signal模塊,但signal主要是針對Unix系統(tǒng),所以在Windows平臺上Python不能很好的發(fā)揮信號處理的功能。
要查看Python中的信號量,可以使用dir(signal)來查看。
signal.signal()
在signal模塊中,主要是使用signal.signal()函數(shù)來預(yù)設(shè)信號處理函數(shù)
singnal.signal(signalnum, handler)
其中第一個參數(shù)是信號量,第二個參數(shù)信號處理函數(shù)。
下面看個簡單的例子,其中
定義了一個信號處理函數(shù)signal_handler(),用來處理程序接收到信號時執(zhí)行的操作
一段循環(huán)等待發(fā)送信號
#!/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)
運(yùn)行上面的程序
python test.py
然后另外開一個終端,找到對應(yīng)的進(jìn)程,并執(zhí)行下面的kill操作
kill -1 <pid> kill -2 <pid> kill -3 <pid> kill -14 <pid> kill -15 <pid> kill -18 <pid> kill -9 <pid> # 最后殺死進(jìn)程
此時可以看到test.py的輸出,打印的就是具體接收到的信號。
這里注意一點就是程序中注冊了SIGINT信號,所以在運(yùn)行程序后使用CTRL+C并不能結(jié)束進(jìn)程,而是仍然打印進(jìn)程接收到的信號。
signal.alarm()
另外,signal模塊提供了一個很有用的函數(shù)signal.alarm(),它用于在一定時間后向進(jìn)程自身發(fā)送SIGALRM信號,比如下面的例子設(shè)置5秒后向自己發(fā)送一個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詳解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python實現(xiàn)為Excel中每個單元格計算其在文件中的平均值
這篇文章主要為大家詳細(xì)介紹了如何基于Python語言實現(xiàn)對大量不同的Excel文件加以跨文件、逐單元格平均值計算,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-10-10

