首页 > 解决方案 > Gunicorn 的 worker_exit

问题描述

我正在使用Gunicorn部署 Django 应用程序。

在 util.py 中定义了一个全局单例变量:

global SNS_PRODUCERS
SNS_PRODUCERS = {}
def close_producers():
    logger.info('Closing all producers...')
    global SNS_PRODUCERS
    for name, producer in SNS_PRODUCERS.items():
        producer.close()

我想close_producers在我的应用关闭时打电话。我在gunicornconf.py中添加了以下内容:

def child_exit(server, worker):
    # Join background threads in util.SNS_PRODUCERS
    try:
        from util import close_producers
        close_producers()
    except:
        pass


def worker_exit(server, worker):
    try:
        from util import close_producers
        close_producers()
    except:
        pass

我的理解是,有一个主进程,多个从主进程分叉的工作进程。在每一个进程中,util.py都被导入到这个进程中。SNS_PRODUCERS因此,这些进程中有多个,一对一SNS_PRODUCERS的工作进程或主进程。

每个工作进程都有其自己的 worker_exit钩子 。主进程有它自己的 child_exit钩子

当一个工作人员关闭时,它worker_exit会被调用,然后关闭ITS OWN SNS_PRODUCERS。其他SNS_PRODUCERS的仍然开放。

我对吗?欢迎任何更正。

标签: pythondjangopython-3.xgunicornmultiple-processes

解决方案


推荐阅读