Celery Cloudamqp为每个任务创建新连接

4 投票
1 回答
601 浏览
提问于 2025-04-18 03:57

我现在在使用nitrous.io,运行Django和Celery,然后用Cloudamqp作为我的消息代理,使用的是免费计划(最多支持3个连接)。我可以顺利连接,并且可以正常启动一个定时任务。

当我运行

    celery -A proj worker  -l info   

时,Cloudamqp上会立即创建2个连接,我可以在第3个连接上手动创建多个任务,一切都很好。不过,当我运行celery beat时,

    celery -A proj worker -B -l info

所有3个连接都会被使用,如果celery beat创建了1个或多个新任务,就会再创建一个第4个连接,这样就超过了允许的最大连接数。

我尝试过并且现在设置了

    BROKER_POOL_LIMIT = 1

但这似乎并没有限制连接数。我也试过

    celery -A proj worker -B -l info
    celery -A proj worker -B -l info -c 1  
    celery -A proj worker -B -l info --autoscale=1,1  -c 1  

但没有成功。

为什么会立即创建2个没有做任何事情的连接?有没有办法把最初的celery连接限制为0或1,或者让任务共享/在celery beat连接上运行呢?

1 个回答

1

虽然这个设置实际上并没有限制连接数,但有用户发现,关闭连接池后,实际的连接数量减少了:

BROKER_POOL_LIMIT = 0

Redis和Mongo这两个后端各自有自己的连接限制参数。

而AMQP后端没有这样的设置。

基于这些信息,我不太确定BROKER_POOL_LIMIT到底是用来干嘛的,但我真的希望能看到CELERY_AMQP_MAX_CONNECTIONS这个设置。

这里还有一个相关的问题,但没有人回答过:在使用CloudAMQP通过dotcloud时,如何减少django-celery的连接数?

撰写回答