группа сельдерея выполняет задачи последовательно, а не параллельно - PullRequest
0 голосов
/ 02 мая 2020

Я изучаю функцию группы сельдерея

@celery_app.task
def celery_task():
    import time
    time.sleep(30)
    print('task 1')

@celery_app.task
def celery_task2():
    import time
    time.sleep(10)
    print('task 2')

@celery_app.task
def test():
    from datetime import datetime
    print(datetime.now())
    job = group(
        celery_task.s(),
        celery_task2.s()
    )
    result = job()
    result.get()
    print(datetime.now())

Однако, когда я запускаю test() с консоли python и просматриваю их в журналах сельдерея, кажется, что задача1 была запущена, а задача 2 была запустить.

Разве он не должен работать параллельно? Вся функция test() заняла 30 секунд, чтобы завершить

Чтобы запустить своих работников из сельдерея, я использую команду celery -A tasks worker -l=INFO

1 Ответ

1 голос
/ 02 мая 2020

Вы уверены, что на все test() ушло 30 с? Если так, я не понимаю, в чем проблема? Если это не было параллельно - это должно было занять 30 с + 10 с = 40 с.

Здесь есть две вещи:

  1. Используйте флаг --concurrency, когда вы запускаете своего работника, чтобы он мог выполнять более одной задачи. В качестве альтернативы, используйте более одного работника (запустите два процесса): celery -A tasks worker -l=INFO --concurrency=4 (я не уверен, что по умолчанию - я думаю, это один).
  2. Запустите ваш холст асинхронно с job.delay() или job. apply_async() запустить asyn c.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...