我希望这个问题有资格有资格堆叠。
与芹菜4.2.0合作,并作为经纪人和后端。
有一个任务
@shared_task()
def add(a, b):
return a+b
,而 worker处于活动状态时,运行流浪命令:
add.apply_async(countdown=60)
导致该任务未注册到默认的芹菜队列,但仍在 Countdown
中所述的时间后执行为什么要这么做,我该如何寻找所有待处理的任务?如果将任务注册到队列:
with celery_app.pool.acquire(block=True) as conn:
tasks = conn.default_channel.client.lrange('celery', 0, -1)
如果我在启动任务时终止了工人,我会得到流浪:
[WARNING/MainProcess] Restoring 1 unacknowledged message(s)
这告诉我任务保留在其他地方,而不是队列,但我无法弄清楚
事实证明,这实际上是预期的行为,因为工人甚至在执行之前抓住了待处理任务,从而将其从队列中删除。
要实现我想要的东西,这是禁用工人在实际开始处理这些任务之前从排队中从队列中服用任务,而失去了该任务的跟踪,我不得不一起使用2个芹菜设置
task_acks_late = True
worker_prefetch_multiplier = 1
这样,将任务从其原始队列中删除,但仍存在于称为"无acked"的队列中,这使我可以监视它。优化芹菜
请注意,使用'acks_late'acks后期设置具有您需要注意的一定影响,这样,如果工人意外终止,将恢复任务并在下次恢复工作时重新运行。