我正在使用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
的仍然开放。
我对吗?欢迎任何更正。