我試圖用Python來加快速度,嘗試用它替換一些C。我遇到了模塊之間共享數據的問題,或者更可能是我對整個事物的理解。我有一個簡單的信號模塊:需要了解Python信號和模塊
import sys, signal
sigterm_caught = False
def SignalHandler(signum, stackframe):
if signum == signal.SIGTERM:
sigterm_caught = True
sys.stdout.write("SIGTERM caught\n")
def SignalSetup():
signal.signal(signal.SIGTERM, SignalHandler)
,我的主要代碼有這樣一個循環:
signals.SignalSetup()
while signals.sigterm_caught == False:
sys.stdout.write("sigterm_caught=%s\n" % str(signals.sigterm_caught))
time.sleep(5)
我運行它,然後殺死進程,裏面signals.py它得到的信號,將sigterm_caught設置爲True,但主進程中的循環沒有看到sigterm_caught值的變化。
所以(一)是我的方法完全錯誤的Python方式? (b)我在嘗試引用模塊中的變量時做錯了什麼? (c)我是否應該以不同的方式處理信號,例如引發異常?
此外: 通過引發異常來處理信號還是我的舊C方法仍然是有效的?
工程。謝謝。我最好重新閱讀一下Python範圍。 – codebunny 2010-03-24 15:12:08
通過引發異常來處理信號還是全局變量方法仍然有效? – codebunny 2010-03-24 15:17:30
@codebunny,你唯一應該「異步」引發的異常(即來自與正在運行的代碼無關的外部原因)是'KeyboardInterrupt';通過這個例外(或其子類)彙集所有信號是一種可能性,但恕我直言,在可行的情況下,您的替代方案更可取(意見可能不同;-)。 – 2010-03-24 15:35:57