我在使用带有RabbitMQ的Celery.最近,我注意到大量的临时队列正在制作中.
因此,我进行了实验,发现当任务失败时(即任务引发异常),就会形成一个具有随机名称的临时队列(如c76861943b0a4f3aaa6a99a6db06952c)并保留队列.
在rabbitmqadmin中找到的临时队列的一些属性如下 -
auto_delete:真正的消费者:0持久:错误消息:1 messages_ready:1
每次任务失败时都会产生一个这样的临时队列(即引发异常).如何避免这种情况?因为在我的生产环境中会形成大量这样的队列.
Phi*_*ham 17
听起来你正在使用amqp作为结果后端.从这里的文档是使用该特定设置的陷阱:
- 每个新任务都会在服务器上创建一个新队列,其中代理可能会使用队列重载数千个任务,这将以
负面方式影响性能.如果您正在使用RabbitMQ,那么每个
队列将是一个单独的Erlang进程,因此如果您计划
同时保留许多结果,则可能必须增加Erlang
进程限制,以及您的OS
允许的最大文件描述符数- 旧结果不会自动清除,因此您必须确保使用结果,否则队列的数量最终会失控.如果您正在运行RabbitMQ 2.1.1或更高版本,则可以利用队列的x-expires参数,这将在未使用后的某个时间限制之后使队列到期.可以通过CELERY_AMQP_TASK_RESULT_EXPIRES设置(默认情况下未启用)设置队列到期(以秒为单位).
从我在更改日志中读到的内容来看,这不再是版本> = 2.3.0中的默认后端,因为用户通过此行为在后端得到了一点点.如果这不是您需要的功能,我建议您更改结果后端.
Sid*_*rth 11
好吧,菲利普就在那里.以下是我如何解决它的描述.它是celeryconfig.py中的配置.
正如菲利普所说,我仍在使用CELERY_BACKEND ="amqp".但除此之外,我现在使用CELERY_IGNORE_RESULT = True.此配置将确保不为每个任务形成额外队列.
我已经在使用此配置但仍然在任务失败时,形成了额外的队列.然后我注意到我正在使用另一个需要删除的配置,即CELERY_STORE_ERRORS_EVEN_IF_IGNORED = True.这样做是因为它没有存储所有任务的结果,只是为了错误(失败的任务),因此失败的任务有一个额外的队列.
| 归档时间: |
|
| 查看次数: |
4099 次 |
| 最近记录: |