【问题标题】:Django + celery - why my periodic task in not running?Django + celery - 为什么我的定期任务没有运行?
【发布时间】:2016-10-25 23:17:29
【问题描述】:

我正在使用 django + celery 进行定期任务。我的项目有 django-celery==3.1.17,使用的代理是 Redis,它正在工作。

在我的设置文件中:

CELERYBEAT_SCHEDULE={
    'delivery_send': {
        'task': 'delivery.tasks.DeliverySendTask',
        'schedule': timedelta(minutes=1),
        'args': [],
    },
}

CELERY_ROUTES = {
    'delivery.tasks.DeliverySendTask': {
        'queue': 'periodic_tasks',
        'routing_key': 'periodic_tasks'
    }, 
}

还有更多的 celery 设置,但我想这两个与这个问题最相关。

任务:

class DeliverySendTask(Task):
    def run(self, *args, **kwargs):   
        logger.info('executing task!')     
        from .models import Dispatch
        Dispatch.objects.all().delete()

然后我运行python manage.py celery beat 并在控制台中查看

[2016-06-23 14:32:01,230: INFO/MainProcess] Scheduler: Sending due task delivery_send (delivery.tasks.DeliverySendTask)

但删除从未真正执行。我错过了什么?

感谢您的帮助。

【问题讨论】:

  • 你在运行 celery worker python manage.py celery worker -l info
  • @RaviKumar 现在任务已执行。我缺少的是正确启动工人?

标签: python django django-celery


【解决方案1】:

也安装 celery。然后不要使用 manage.py 运行它。像这样运行它:

celery -A your_app_name worker -l info -B -E

所以没有 python manage.py

【讨论】:

    【解决方案2】:

    celery beat 不执行任务。仅将任务安排到队列中。 celery worker 执行任务。

    要定期执行任务,您必须同时启动 celery beatcelery worker

    python manage.py celery beat
    python manage.py celery worker
    

    【讨论】:

    • 类似python manage.py celery worker -A helloapp --beat
    • 上述命令出错,提示“未知命令:'celery'键入'manage.py help'以供使用。”
    猜你喜欢
    • 2016-12-28
    • 2012-05-09
    • 2022-11-14
    • 2020-11-03
    • 2014-02-23
    • 2014-12-01
    • 2020-04-05
    • 1970-01-01
    • 2021-06-15
    相关资源
    最近更新 更多