【发布时间】:2020-12-20 16:27:50
【问题描述】:
我的 Django 项目有一个应用程序覆盖了它的 AppConfig.ready() 方法。在 ready 方法中,我启动了一个单独的 multiprocessing.Process 来处理来自外部消息队列的消费,这似乎导致代码更改时自动重载出现问题。
def infinite_loop():
while True:
time.sleep(10)
class BrokerConfig(AppConfig):
name = 'backend.broker'
has_started = False
def ready(self):
if not os.environ.get("RUN_MAIN"):
# Avoid running for reloader
return
if BrokerConfig.has_started:
return
BrokerConfig.has_started = True
proc = Process(target=infinite_loop)
proc.start()
无论出于何种原因,这都会导致自动代码重新加载中断。似乎重新加载器无法清理已启动的进程。重新加载器打印了这个然后卡住了:
.../backend/broker/apps.py changed, reloading.
解决此问题的一种方法是将启动的进程设置为守护进程,但如果无法进行此类设置,我仍然很好奇您如何解决此问题。
我正在寻找某种方法来在重新加载时添加一些自定义清理,但我似乎找不到这样做的方法。您是否可以订阅一些钩子或信号来确定是否触发了重新加载?
【问题讨论】:
标签: django