Celery Cloudamqp为每个任务创建新连接
我现在在使用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的连接数?