【问题标题】:How to run celery beat where each task has individual queues?如何在每个任务都有单独的队列的情况下运行 celery beat?
【发布时间】:2019-03-04 09:23:09
【问题描述】:

我有一个带有多个 celery beat 任务的 Django 项目,当我有多个带有单独队列的 celery beat 任务时遇到问题,所以我有可能一次运行所有这些,运行的最佳实践是什么这些?

from __future__ import absolute_import, unicode_literals
import os
from celery import Celery
from celery import Celery
from celery.schedules import crontab


os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'projectDemon.settings')
app = Celery('projectDemon')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()

@app.on_after_configure.connect
def setup_periodic_tasks(sender, **kwargs):

    sender.add_periodic_task(
        crontab(minute=30, hour='7'),
        task1.s('Checking task1 !'),
                    queue= 'task1',
                    options={
                        'queue': 'task1',
                        'routing_key': 'task1'}
    )
    sender.add_periodic_task(
        crontab(minute=00, hour='6'),
        task2.s('Checking task2 !'),
                queue= 'task2',
                options={
                    'queue': 'task2',
                    'routing_key': 'task2'}
    )
    sender.add_periodic_task(
        crontab(
        minute='*/1',  # run every minute
    ),
        task3.s('Checking task3 !'),
            queue= 'task3',
            options={
                'queue': 'task3',
                'routing_key': 'task3'}

        )


@app.task
def task1(arg):
    print(arg)



@app.task
def task2(arg):
    print(arg)



@app.task
def task3(arg):
    print(arg)

【问题讨论】:

  • 您能否详细说明您的问题是什么?我可以根据我这样做的方式来回答(这是不同的),但我不确定你面临什么问题

标签: python django celery celerybeat


【解决方案1】:

我处理这个问题的方法是定义task_routes,我在其中定义了将使用特定队列的每个任务。我有某些任务总是要使用特定的队列,无论是从整个应用程序触发还是通过 celery beat 触发。 (请注意,您未在任务路由中定义的任何任务都将使用默认队列)。

从那里,我简单地将 celery beat 定义为调用特定任务的调度程序(不将队列作为变量传递)。

我对此解决方案没有任何问题,但如果您解释您的具体问题,我可能会提供更好的帮助。

【讨论】:

  • 感谢您的宝贵时间,我在启动多个终端和运行命令时遇到问题,我不能用一个命令来完成
  • 如果你有多个队列,那么每个队列都需要一个worker。如果您想使用单个命令,我的建议是使用supervisor,这将允许您立即启动和管理您的任务。 Here's 一些links 的例子。
猜你喜欢
  • 2021-11-05
  • 2015-10-24
  • 2017-01-24
  • 2019-02-16
  • 1970-01-01
  • 2019-05-15
  • 2015-10-22
  • 2020-04-29
  • 1970-01-01
相关资源
最近更新 更多