django中引入celery后发现在代码中写如下这样的定时任务,启动celery和django的工程后,他们都会调用这个定时任务导致,任务有的时候会冲突出现奇怪的问题。如何解决请继续看。
scheduler = BackgroundScheduler() scheduler.add_job(testFunc, 'interval', seconds=60) scheduler.start()
解决方法:
要让Celery启动时让Django中的scheduler = BackgroundScheduler()
失效,只让启动Django的manage.py runserver
时定时任务有效果,避免两个进程同时调度定时任务,可以在启动Celery之前检查是否已经有一个Django进程在运行。
首先,在settings.py
中添加以下代码:
import os import sys # 设置环境变量 os.environ['DJANGO_ENABLE_SCHEDULER'] = 'False' # 检查是否已经有一个Django进程在运行 if 'runserver' in sys.argv: os.environ['DJANGO_ENABLE_SCHEDULER'] = 'True'
然后,在启动定时任务的地方修改代码如下:
from apscheduler.schedulers.background import BackgroundScheduler import os def start_scheduler(): scheduler = BackgroundScheduler() # 添加定时任务 # ... scheduler.start() if os.environ.get('DJANGO_ENABLE_SCHEDULER') == 'True': start_scheduler()
亲测有效,终于解决了一个大问题,解除了很大的隐患。
标签:django,celery,任务,scheduler,定时,os From: https://www.cnblogs.com/yclh/p/18046792