我正在制作一个使用 gevent 异步执行某些工作的库。我想保证工作完成,即使主模块完成执行。
class separate_library(object):
def __init__(self):
import gevent.monkey; gevent.monkey.patch_all()
def do_work(self):
from gevent import spawn
spawn(self._do)
def _do(self):
from gevent import sleep
sleep(1)
print 'Done!'
if __name__ == '__main__':
lib = separate_library()
lib.do_work()
如果你运行它,你会注意到程序立即结束,并且Done!
没有被打印出来。
现在,主模块不知道也不关心separate_library
实际如何完成工作(甚至gevent
是正在使用的工作),所以要求加入那里是不合理的。
有什么方法separate_library
可以检测到某些类型的程序退出,并在工作完成之前停止?键盘中断、SIGINT,sys.exit()
应该立即结束程序,因为这可能是预期的行为。
谢谢!