代理队列已满时,Python Celery task.delay()

时间:2017-01-10 18:37:14

标签: python-3.x celery

我使用celery 4RabbitMQ作为经纪人。我限制Queue(大小== 200)。我的主要代码如下:

for i in range(200):
    tasks.delay(i)

如果i< = size的范围,它可以工作。如果我打电话给这样的话:

for i in range(2000):
    tasks.delay(i)

大小限制为200,Queue将被填满,其余任务将被跳过。

有谁能解释如何处理这种情况?我需要等到Queue免费并insert另一项任务。

由于

1 个答案:

答案 0 :(得分:2)

这是RabbitMQ行为。 RabbitMQ docs

  

一旦达到限制,将从队列前面删除或删除邮件,以便为新邮件腾出空间。

您可以通过修改配置在RabbitMQ中进行管理,也可以使用多个队列。 解决此问题的另一种方法是使用celery's apply_async,它可以让您设置重试值,eta或retry_policy。 BTW,delay()只是apply_async()的快捷方式。