芹菜组按顺序而不是并行运行任务

celery group runs tasks sequentially instead of in parallel

我正在学习celery组函数

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

但是,当我从 python 控制台 运行ning test() 并在 celery 日志中查看它们时,似乎 task1 是 运行 然后 task2 是运行。

不应该是运行并行吗?整个 test() 函数用了 30 秒才完成

为了启动我的 celery worker,我使用命令 celery -A tasks worker -l=INFO

你确定整个test()花了30秒吗?如果是这样,我不明白这是什么问题?如果它不是平行的——它必须花费 30s+10s=40s。

这里有两件事:

  1. 当你 运行 你的工作器时使用 --concurrency 标志,这样它就可以处理多个任务。或者,使用多个 worker(运行 两个进程): celery -A tasks worker -l=INFO --concurrency=4(我不确定默认值是什么 - 我想是那个)。
  2. 运行 您的 canvas 与 job.delay()job. apply_async() 异步到 运行 异步。