Celery beat在同一时间间隔组下安排多个任务

13 投票
2 回答
14226 浏览
提问于 2025-04-17 22:43

我正在尝试设置两个每分钟都运行的任务。有没有办法把它们组合在一起运行呢?

我在我的 celeryconfig.py 文件中指定了 CELERYBEAT_SCHEDULE,内容如下:

CELERYBEAT_SCHEDULE = {
    'every-minute': {
        'task': 'tasks.add',
        'schedule': crontab(minute='*/1'),
        'args': (1,2)
    },
}

所以如果我想运行两个任务,我应该期待像这样吗?

CELERYBEAT_SCHEDULE = {
    'every-minute': {
        'task': ['tasks.add','task.multiply'],
        'schedule': [crontab(minute='*/1'),crontab(minute='*/1')],
        'args': [(1,2),(3,4)]
    },
}

但是这样并没有成功。有没有什么标准的方法可以做到这一点呢?

2 个回答

0
CELERYBEAT_SCHEDULE = {
'every-minute': {
    'task': 'tasks.add',
    'schedule': crontab(minute='*/1'),
    'args': (1,2)
},

你可以使用单任务的celery来完成你的工作,这正好符合你的问题。

你的tasks.py文件应该是这样的:

def multiply(p1,p2):
  return p1*p2

def add(x,y):
  z=multiply(3,4)
  return x+y,z
21

根据Celery文档:定时任务的说明,你只能指定要执行的任务名称(不能是列表等其他形式)。

你可以创建两个不同的调度条目:

CELERYBEAT_SCHEDULE = {
    'every-minute_add': {
        'task': 'tasks.add',
        'schedule': crontab(minute='*/1'),
        'args': (1,2)
    },
    'every-minute_multiply': {
        'task': 'task.multiply',
        'schedule': crontab(minute='*/1'),
        'args': (3,4)
    },
}

撰写回答