Сельдерей - цепные задания выполняются не по порядку - PullRequest
1 голос
/ 05 июня 2019

Я посылаю цепочку из трех заданий моим сельдереям. Первый и третий добавляются в очередь «filestore», которая обслуживается работником A. Второй добавляется в очередь «cloud», которая обслуживается работником B.

Я хочу, чтобы три задачи выполнялись по порядку, одна за другой.

Поведение, которое я наблюдаю, состоит в том, что работник А выполняет задачу 1, затем задачу 3, затем работник Б выполняет задачу 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),
                        ]
)

Что я делаю не так?

1 Ответ

1 голос
/ 05 июня 2019

Вы пробовали использовать цепной класс из сельдерея?

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()
...