python - 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
的仍然开放。
我对吗?欢迎任何更正。
解决方案
推荐阅读
- python-3.x - 使用 nginx + tornado 处理 5000 个 websocket 连接时打开的文件过多
- python - 对于每次迭代,只将数据添加到 pandas 中空数据框的几列
- python - 为什么 PIL 和 matplotlib 在这里创建完全不同的图像?
- c# - 反序列化具有嵌套列表的集合期间出现 JsonReaderException
- python - 从自定义文本字段中提取年份和月份
- matplotlib - 线性回归
- java - 返回原始方法的数据类型
- c# - 处理图像时避免多个 LOH 段/碎片
- shiny - 如何在渲染图更新后禁用操作按钮 n 秒
- javascript - 如何将从服务器发送的 JSON 字符串转换为 JavaScript 对象