首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当芹菜节拍开始时运行芹菜任务

当芹菜节拍开始时运行芹菜任务
EN

Stack Overflow用户
提问于 2015-08-02 01:51:15
回答 2查看 2.1K关注 0票数 0

我如何调度一个任务运行,当我启动芹菜节拍,然后在1个小时后再次运行。

目前我在settings.py中有日程安排:

代码语言:javascript
复制
CELERYBEAT_SCHEDULE = {
    'update_database': {
        'task': 'myapp.tasks.update_database',
        'schedule': timedelta(seconds=60),
    },
}

我在stackoverflow上看到了一篇1年前的帖子,问了同样的问题:How to run celery schedule instantly?

然而,这对我不起作用,因为当我运行django服务器时,我的芹菜工人收到3-4个相同任务的请求

我正在启动我的工人,并像这样敲打:

代码语言:javascript
复制
celery -A dashboard_web worker -B --loglevel=INFO --concurrency=10
EN

回答 2

Stack Overflow用户

发布于 2019-04-02 03:27:01

Crontab计划

您可以尝试使用crontab计划,该计划将每小时运行一次,并在计划程序初始化后1分钟启动。Warning:你可能需要几分钟后才能启动,否则你可能需要等待整整一个小时。

代码语言:javascript
复制
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。然后,在MyAppConfigready方法中调用您的任务,只要您的应用程序就绪,就会调用该方法。

代码语言:javascript
复制
#myapp/apps.py

class MyAppConfig(AppConfig):
    name = "myapp"

    def ready(self):
        from .tasks import update_database
        update_database.delay()

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

编辑:没有看到您提到的链接中已经包含了第二种方法。我会把它留在这里,以防对其他到达这里的人有用。

票数 2
EN

Stack Overflow用户

发布于 2016-03-28 18:47:42

尝试设置配置参数CELERY_ALWAYS_EAGER = True

像这样的东西

代码语言:javascript
复制
app.conf.CELERY_ALWAYS_EAGER = True
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31764528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档