【问题标题】:Django Celery & Django-Celery-BeatDjango Celery & Django-Celery-Beat
【发布时间】:2019-11-15 18:27:39
【问题描述】:

我是异步任务的新手,我正在使用 django-celery,并希望使用 django-celery-beat 来安排定期任务。

但是看起来 celery-beat 并没有完成一次性任务。我是否需要两个 Celery 实例,一个作为工作人员用于一项关闭任务,一个作为计划任务的节拍才能使其正常工作?

【问题讨论】:

  • beat 不需要两个单独的 celery worker 才能正常工作。你能分享一下芹菜,节拍设置和配置文件吗?
  • 是的,我知道我只需要一个工作人员来进行节拍——但我也有一种方法让用户触发不属于计划的一次性功能并被执行。两者都可以由一个节拍工人完成吗?我正在使用这个命令:
  • "celery -A myproject.celery beat -l info --scheduler django_celery_beat.scheduler:DatabaseScheduler"
  • 这是我用于一次性任务的:“celery -A flock.celery worker -l DEBUG -E”@Jijo
  • 不需要 2 个单独的 celery 实例。计划任务和非计划任务都可以在一个实例中执行。您可以在定义周期性任务时指定队列名称。

标签: python django celery django-celery


【解决方案1】:

-B 参数传递给您的worker,它是运行节拍计划的参数。这个工人将完成所有其他任务,从beat发送的那些,以及“一次性”的那些,对于工人来说真的没关系。

所以完整的命令看起来像:

celery -A flock.celery worker -l DEBUG -BE.

【讨论】:

    【解决方案2】:

    如果您有多个周期性任务,例如每 10 秒执行一次,那么它们都应该指向同一个调度对象。请参考here

    【讨论】:

    • 问题是关于将一​​次性任务与周期性任务混合,而不是多个周期性任务。