uWSGI - 无法正确停止2个辅助线程?

时间:2014-04-18 22:06:57

标签: python multithreading uwsgi

我为每个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。 - 绝对一切都开始了。 : - )

0 个答案:

没有答案