【发布时间】:2010-03-24 23:16:48
【问题描述】:
我正在尝试跟上 Python 的速度,尝试用它替换一些 C。我遇到了在模块之间共享数据的问题,或者更可能是我对整个事情的理解。我有一个简化的信号模块:
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 值的变化。
那么 (a) 我的方法对于 Python 方式来说是完全错误的吗? (b) 我在尝试引用模块中的变量时是否做错了什么? (c) 我应该以不同的方式处理信号,比如引发异常吗?
补充: 通过引发异常来处理信号更好,还是我的旧 C 方法仍然有效?
【问题讨论】: