如果在本地开发时,Celery工作进程出现不同步的问题,可能是因为代码修改之后未能正确重新加载Celery进程,导致进程代码与实际代码不匹配。
解决方法是使用autoreload来自动监控代码的修改并重新加载Celery进程。在Celery的配置中添加以下代码即可:
from django.utils import autoreload
# 是否启用自动重载
CELERYD_AUTORELOAD = True
# 重载检测间隔时间
CELERYD_MAX_TASKS_PER_CHILD = 1
def on_change_reload(sig, frame):
# 重载Celery进程
autoreload.restart()
# 监控代码变化
autoreload.watch('your_project_path')
# 注册信号
autoreload._signal.signal(autoreload._signal.SIGINT, on_change_reload)
autoreload._signal.signal(autoreload._signal.SIGTERM, on_change_reload)
其中,CELERYD_AUTORELOAD
为是否开启自动重载,CELERYD_MAX_TASKS_PER_CHILD
为每个worker最多运行任务的次数,autoreload.watch('your_project_path')
为监控代码的路径。
通过以上修改,可以自动监控代码修改并重新加载Celery进程,从而解决本地开发时Celery工作进程不同步的问题。