简体   繁体   中英

How do you call class methods in a signal handler in python daemon?

I'm trying to write a signal handler that will call methods from a class variable.

I have code that looks like this:

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()

This doesn't work. Python throws a NameError exception when I do a kill -USR1 on the daemon. I also tried defining functions inside main that would handle the exception and call those functions from the signal handlers, but that didn't work either.

Anybody have ideas on how to implement this?

One option would be to import class bar inside your sigusr1_handler function. It's probably a good idea to have it in a different file anyway

Do you import signal? Because if I run you code I get:

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

You might fix this with:

import signal

And have a look at your string comparison oparator

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

I generally use the '==' operator instead of '='

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM