如何在python守护进程中的信号处理程序中调用类方法?

时间:2013-05-16 12:24:32

标签: python signals nameerror

我正在尝试编写一个信号处理程序,它将从类变量中调用方法。

我的代码如下:

import daemon
class bar():
    def func():
         print "Hello World!\n"

def sigusr1_handler(signum,frame):
    foo.func() 

def main():
    foo = bar()

context = daemon.DaemonContext(stdout=sys.stdout)
context.signal_map = {
    signal.SIGUSR1: sigusr1_handler
}

with context:
    if (__name__="__main__"):
        main()

这不起作用。当我在守护进程上执行kill -USR1时,Python会抛出一个NameError异常。 我也尝试在main中定义函数来处理异常并从信号处理程序调用这些函数,但这也不起作用。

有人对如何实现这个有想法吗?

2 个答案:

答案 0 :(得分:0)

一种选择是在sigusr1_handler功能中导入类栏。无论如何将它放在不同的文件中可能是个好主意

答案 1 :(得分:0)

你导入信号吗?因为如果我运行代码我会得到:

Traceback (most recent call last):
  File "pydaemon.py", line 16, in <module>
    signal.SIGUSR1: sigusr1_handler
NameError: name 'signal' is not defined

您可以通过以下方式解决此问题:

import signal

看看你的字符串比较oparator

with context:
    if (__name__="__main__"):
        main()

我通常使用'=='运算符而不是'='