首页 > 解决方案 > 谁在 celery 中等待 apply_async(countdown=10)

问题描述

我以并发 20 运行 celery worker

"-c", "20", "-P", "eventlet", "-Ofair"

并在另一个任务中为这个工作队列生成 20 个任务包

  async_call.apply_async(
       (call_id, engine),
       expires=60,
       countdown=60*random(),  # random delay, to prevent spikes
  )

flower查看器中,我看到不超过 20 个任务。

问题是:谁在等待倒计时?它在队列里面吗?还是在工作进程内部(接受任务的工作人员的一些空闲时间)?

如果它在工作人员内部,那么要使用所有 CPU,我需要根据工作时间的倒计时时间(空闲时间)的分数来增加并发性。

标签: celery

解决方案


等待是在每个 celery 工作者拥有的进程/线程中,如果工作者正在等待任务,它将轮询代理以获取新任务。


推荐阅读