Celery beat在同一时间间隔组下安排多个任务
我正在尝试设置两个每分钟都运行的任务。有没有办法把它们组合在一起运行呢?
我在我的 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)
},
}