运行芹菜任务时,芹菜跳动开始



我如何安排一个任务在我开始芹菜节拍时运行,然后在1小时左右再次运行。

目前我在settings.py:

CELERYBEAT_SCHEDULE = {
    'update_database': {
        'task': 'myapp.tasks.update_database',
        'schedule': timedelta(seconds=60),
    },
}

我在stackoverflow上看到一篇一年前的帖子,问了同样的问题:如何立即运行芹菜时间表?

然而,这并不适用于我,因为我的芹菜工作得到3-4个请求相同的任务,当我运行django server

我正在启动我的worker和beat:

celery -A dashboard_web worker -B --loglevel=INFO --concurrency=10

Crontab schedule

您可以尝试使用crontab调度,它将每小时运行一次,并在调度程序初始化后1分钟启动。警告:您可能希望在几分钟后执行该操作,以防启动时间较长,否则您可能需要等待整整一个小时。

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方法

为了确保您的任务立即运行,您可以使用与前面相同的方法创建周期性任务,而不将1添加到minute中。然后,在MyAppConfigready方法中调用任务,该方法在应用程序准备好时调用。

#myapp/apps.py
class MyAppConfig(AppConfig):
    name = "myapp"
    def ready(self):
        from .tasks import update_database
        update_database.delay()

请注意,如果您要使用django_celery_beat,您也可以直接在ready方法中创建周期性任务。

编辑:没有看到第二个方法已经涵盖在您提到的链接中。

尝试设置配置参数CELERY_ALWAYS_EAGER = True

像这样

app.conf.CELERY_ALWAYS_EAGER = True

相关内容

  • 没有找到相关文章

最新更新