我正在向芹菜工人发送一连串的三个任务。第一个和第三个添加到由工作者A服务的队列“文件存储”。第二个和第三个添加到由工作者B服务的队列“云”。
我想要的行为是要依次执行三个任务。
我所看到的是工人A完成任务1,然后执行任务3,然后工人B完成任务2。
result = app.send_task(
"workerTasks_filestore.task_upload_scan_to_s3", args=[scan.scan_name], queue='filestore',
chain=[
Signature('workerTasks.do_processing_task', args=[scan.scan_name, spd_name], queue=queue, immutable=True),
Signature('workerTasks_filestore.task_download_scan_from_s3', args=[scan.scan_name], queue='filestore', immutable=True),
]
)
我在做什么错了?
答案 0 :(得分:1)
您尝试使用celery的链条类吗?
from celery import chain, Signature
chained_tasks = chain([
Signature('workerTasks_filestore.task_upload_scan_to_s3', args=(scan.scan_name,), queue='filestore'),
Signature('workerTasks.do_processing_task', args=(scan.scan_name, spd_name,), queue=queue, immutable=True),
Signature('workerTasks_filestore.task_download_scan_from_s3', args=(scan.scan_name,), queue='filestore', immutable=True)
])
result = chained_tasks.apply_async()