gpt4 book ai didi

rabbitmq - 为什么 celery 向rabbitmq添加了数千个队列,这些队列在任务完成后似乎仍然存在很长时间?

转载 作者:行者123 更新时间:2023-12-02 14:27:18 25 4
gpt4 key购买 nike

我正在使用带有rabbitmq后端的celery。它在rabbitmq中生成了数千个队列,其中包含0或1个项目,如下所示:

$ sudo rabbitmqctl list_queues
Listing queues ...
c2e9b4beefc7468ea7c9005009a57e1d 1
1162a89dd72840b19fbe9151c63a4eaa 0
07638a97896744a190f8131c3ba063de 0
b34f8d6d7402408c92c77ff93cdd7cf8 1
f388839917ff4afa9338ef81c28aad75 0
8b898d0c7c7e4be4aa8007b38ccc00ea 1
3fb4be51aaaa4ac097af535301084b01 1

这似乎效率低下,但我进一步观察到这些队列在处理完成后仍持续很长时间。

我发现似乎正在执行此操作的任务:

@celery.task(ignore_result=True)
def write_pages(page_generator):
g = group(render_page.s(page) for page in page_generator)
res = g.apply_async()

for rendered_page in res:
print rendered_page # TODO: print to file

似乎因为这些任务是在一个组中调用的,所以它们被扔进队列但从未被释放。但是,我显然正在消耗结果(因为当我迭代 res 时,我可以看到它们正在打印。所以,我不明白为什么这些任务会保留在队列中。

此外,我想知道正在创建的大量队列是否表明我做错了什么。

感谢您对此提供的任何帮助!

最佳答案

具有 AMQP 后端的 Celery 会将任务逻辑删除(结果)存储在以生成结果的任务 ID 命名的 AMQP 队列中。即使结果耗尽后,这些队列仍将持续存在。

一些建议:

关于rabbitmq - 为什么 celery 向rabbitmq添加了数千个队列,这些队列在任务完成后似乎仍然存在很长时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14636534/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com