Как создавать задания с разными параллелизмами в Celery? - PullRequest
0 голосов
/ 27 сентября 2019

Следующие задачи имеют разные требования.Задача slow должна выполняться только один за другим.Задача fast может выполнять то же самое (или более), но должна быть независимой от задачи slow.

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

@app.task
def slow(x, y):
    # slow operation, only one at a time with concurrency of 1
    heavy_operation_takes_10_minutes()


@app.task
def fast(x, y):
    # can also be concurrency of 1 or more, as long as independent of `slow` task
    # ...
    return x + y

Это возможно с сельдереем?

1 Ответ

0 голосов
/ 27 сентября 2019

Что вы можете сделать, это поместить задачи в разные очереди (что вы уже сделали, как я понимаю), а затем запустить двух разных рабочих из сельдерея для прослушивания этих очередей с разным параллелизмом.Например:

# non-concurrent worker for slow tasks
celery worker -A proj -Q queue-for-slow-tasks --concurrency=1 
# concurrent worker for fast tasks
celery worker -A proj -Q queue-for-fast-tasks
...