Python 訊號處理 signal 模組

2021-09-17 21:48:31 字數 2493 閱讀 1393

官方文件上有這樣的示例:

import signal, os

# 定義乙個訊號處理函式,該函式列印收到的訊號,然後raise ioerror

def handler(signum, frame):

print 'signal handler called with signal', signum

raise ioerror("couldn't open device!")

# 對sigalrm(終止)設定處理的handler, 然後設定定時器,5秒後觸發sigalrm訊號

signal.signal(signal.sigalrm, handler)

signal.alarm(5)

# this open() may hang indefinitely

fd = os.open('/dev/ttys0', os.o_rdwr)

signal.alarm(0) # 關閉定時器

該示例實現的功能是,為了防止開啟乙個檔案出錯或者其他異常一直處於等待的狀態,設定乙個定時器,5秒後觸發ioerror。如果5s內正常開啟檔案,則清除定時器。

import signal

signal.sigabort

signal.sighup # 連線結束通話

signal.sigill # 非法指令

signal.sigint # 連線中斷

signal.sigkill # 終止程序(此訊號不能**獲或忽略)

signal.sigquit # 終端退出

signal.sigterm # 終止

signal.sigalrm # 超時警告

signal.sigcont # 繼續執行暫停程序

等等...

# from project httpscreenshot-master, under directory , in source file httpscreenshot.py.

def timeoutfn(func, args=(), kwargs={}, timeout_duration=1, default=none):

import signal

class timeouterror(exception):

pass

def handler(signum, frame):

raise timeouterror()

# set the timeout handler

signal.signal(signal.sigalrm, handler)

signal.alarm(timeout_duration)

try:

result = func(*args, **kwargs)

except timeouterror as exc:

result = default

finally:

signal.alarm(0)

signal.signal(signal.sigalrm, signal.sig_dfl)

return result

上面這個示例實現了設定函式執行超時返回預設結果的功能。先是設定了乙個超時處理函式,在函式中拋出自定義的丟擲異常。在執行函式前設定了signal.alarm,當超出時間後觸發丟擲異常sigalrm, 然後捕獲這個異常設定預設值,最後做下清理工作將定時器取消,並且將對sigalrm的處理設為預設。

這個示例**於這裡。 需求是動態載入python匯入的模組,也就是說,當匯入的模組**更新時,希望可以立即更新引用的**。示例如下:

# lib.py

def scrape_me_bro():

print "scraping is fun"

#scrape.py

import time

import signal

import lib

def scrape():

# assume we are hitting streaming api

# and doing something buzzwordy with it

while true:

lib.scrape_me_bro()

time.sleep(2)

def reload_libs(signum, frame):

print "received signal: %s at frame: %s" % (signum, frame)

print "excuting a lib reload"

reload(lib)

# register reload_libs to be called on restart

signal.signal(signal.sighup, reload_libs)

# main

scrape()

Python訊號處理

通常我們認為,在try語句中,finally一定會執行。coding utf 8 import time import os import logging try print start try,sleep 30s.print pid s os.getpid time.sleep 30 print ...

訊號機制 Python訊號處理 signal模組

本文是訊號機制三篇記錄中的第二篇,介紹python語言中負責訊號處理的signal模組,並會給出一些小demo 第一篇簡單介紹了linux訊號機制,第三篇則給出關於訊號的乙個應用。三篇組成乙個系列,想起拋磚引玉的作用,希望對大家能有所幫助。該模組提供python中訊號處理的機制,下面是幾個常用的方法...

python 訊號處理模組signal

signal包負責在python程式內部處理訊號,典型的操作包括預設訊號處理函式,暫停並等待訊號,以及定時發出sigalrm等。要注意,signal包主要是針對unix平台 比如linux,mac os 而windows核心中由於對訊號機制的支援不充分 signal包定義了各個訊號名及其對應的整數,...