【问题标题】:Celery is not executing tasks concurrently芹菜没有同时执行任务
【发布时间】:2019-06-22 07:30:28
【问题描述】:

我是 celery 新手,如果需要更多信息,请在 cmets 中告诉我。

我有大约 3000 个任务在 redis 中排队,我想在多个线程上同时执行这些任务,经过一番研究后,我最终使用 eventlet 进行线程池并将并发设置为 500,就像这样

celery worker -A <app_name> -P eventlet -c 500

但是当我检查芹菜花时,有许多可用的免费线程,而芹菜没有使用这些线程

知道如何利用这些空闲线程并加快任务速度吗? 如果可能的话,请推荐一本与芹菜一起工作的好书

【问题讨论】:

    标签: python django redis celery


    【解决方案1】:

    每个线程将运行 500 个 eventlet。如果您的 3000 项任务是短暂的,它们将很快完成。最重要的是,您的预取计数为 400,这意味着当您的工作线程(线程)运行 500 个协程时,它还将有 400 个预取任务。 3 * (500 + 400) = 2700 个任务将立即从队列中取出,假设您的所有工作人员都处于空闲状态。

    【讨论】:

    • 哦,但是任务似乎运行迟了....我推送到队列的任务仅在大约 2 分钟后才被执行,每个大约需要 10-12 秒任务完成。
    • 其中一些(预取的和剩下的 300 个)将稍后运行,因为没有足够的 eventlet 协程来一次运行它们...如果您向 Celery 集群添加 1 个节点,您将能够(假设它们完全空闲)一次运行所有 3000 个任务。
    最近更新 更多