【问题标题】:celery group runs tasks sequentially instead of in parallelcelery 组按顺序而不是并行运行任务
【发布时间】:2020-05-02 11:02:46
【问题描述】:

我正在学习芹菜组功能

@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 控制台运行test() 并在 celery 日志中查看它们时,似乎先运行了 task1,然后运行了 task2。

它不应该并行运行吗?整个test()函数花了30s完成

要启动我的芹菜工人,我使用命令celery -A tasks worker -l=INFO

【问题讨论】:

    标签: python celery


    【解决方案1】:

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

    这里有两件事:

    1. 在运行工作程序时使用--concurrency 标志,以便它可以处理多个任务。或者,使用多个工作人员(运行两个进程): celery -A tasks worker -l=INFO --concurrency=4(我不确定默认值是什么——我猜是这个)。
    2. 使用job.delay()job. apply_async() 异步运行画布以异步运行。

    【讨论】:

    • 哦,是的,谢谢。我没有意识到我将代码设置为休眠 30 秒而不是 20 秒
    猜你喜欢
    • 1970-01-01
    • 2016-11-17
    • 2021-12-16
    • 1970-01-01
    • 2011-05-27
    • 1970-01-01
    • 2022-11-08
    • 1970-01-01
    • 2017-04-19
    相关资源
    最近更新 更多