我如何调度一个任务运行,当我启动芹菜节拍,然后在1个小时后再次运行。
目前我在settings.py中有日程安排:
CELERYBEAT_SCHEDULE = {
'update_database': {
'task': 'myapp.tasks.update_database',
'schedule': timedelta(seconds=60),
},
}我在stackoverflow上看到了一篇1年前的帖子,问了同样的问题:How to run celery schedule instantly?
然而,这对我不起作用,因为当我运行django服务器时,我的芹菜工人收到3-4个相同任务的请求
我正在启动我的工人,并像这样敲打:
celery -A dashboard_web worker -B --loglevel=INFO --concurrency=10发布于 2019-04-02 03:27:01
Crontab计划
您可以尝试使用crontab计划,该计划将每小时运行一次,并在计划程序初始化后1分钟启动。Warning:你可能需要几分钟后才能启动,否则你可能需要等待整整一个小时。
from celery.schedules import crontab
from datetime import datetime
CELERYBEAT_SCHEDULE = {
'update_database': {
'task': 'myapp.tasks.update_database',
'schedule': crontab(minute=(datetime.now().minute + 1) % 60),
},
}参考:http://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html#crontab-schedules
MyAppConfig的Ready方法
为了确保您的任务立即运行,您可以使用与前面相同的方法来创建周期性任务,而无需向minute添加1。然后,在MyAppConfig的ready方法中调用您的任务,只要您的应用程序就绪,就会调用该方法。
#myapp/apps.py
class MyAppConfig(AppConfig):
name = "myapp"
def ready(self):
from .tasks import update_database
update_database.delay()请注意,如果使用django_celery_beat,也可以直接在ready方法中创建定期任务。
编辑:没有看到您提到的链接中已经包含了第二种方法。我会把它留在这里,以防对其他到达这里的人有用。
发布于 2016-03-28 18:47:42
尝试设置配置参数CELERY_ALWAYS_EAGER = True
像这样的东西
app.conf.CELERY_ALWAYS_EAGER = Truehttps://stackoverflow.com/questions/31764528
复制相似问题