我为每个uWSGI进程创建了1个工作线程,为第一个uWSGI进程创建了1个辅助线程:
def post_fork():
if uwsgi.worker_id() == 1:
webapp.start_helper()
webapp.start_worker()
uwsgi.post_fork_hook = post_fork
退出时,我尝试关闭帮助程序和所有工作人员:
def at_exit():
webapp.shutdown()
uwsgi.atexit = at_exit
class WebApp(object):
def shutdown(self):
self.worker.stop()
if self.helper:
self.helper.stop()
问题是助手永远不会停止。我发现如果我在shutdown方法中更改了helper和worker的顺序,那么帮助程序将被停止,但是该进程的工作线程将不会被停止:
class WebApp(object):
def shutdown(self):
if self.helper:
self.helper.stop()
self.worker.stop()
所以我的问题是......为什么他们都不会被阻止?
如何阻止两者?
P.S。 - 这是stop()代码(对于worker和helper大致相同):
class Worker(object):
def stop(self):
logger.info("Stopping!")
if self.thread:
self.stop_worker = True # exits the main loop on the next iteration
logger.info("Joining thread...")
self.thread.join()
我可以得到一个“停止!”来自3名工人和1名助手或4名工人。
P.P.S。 - 绝对一切都开始了。 : - )