使用celeryd作为具有多个django应用程序的守护进程?

Jor*_*ter 20 daemon celery django-celery celeryd

我刚刚开始使用django-celery,我想将celeryd设置为守护进程.但是,这些说明似乎表明它一次只能配置一个站点/项目.芹菜可以处理多个项目,还是只能处理一个项目?而且,如果是这种情况,是否有一种干净的方法来设置celeryd为每个配置自动启动,这需要我为每个配置创建一个单独的init脚本?

Ian*_*and 10

像所有有趣的问题一样,答案取决于它.:)

绝对有可能提出一个场景,其中芹菜可以被两个独立的站点使用.如果多个站点正在向同一个交换机提交任务,并且任务不需要访问任何特定数据库 - 例如,它们使用电子邮件地址,信用卡号或数据库记录以外的其他数据 - 那么一个芹菜可能会足够了.只需确保任务代码位于由所有站点和芹菜服务器加载的共享模块中.

但是,通常情况下,您会发现芹菜需要访问数据库 - 它根据作为任务参数传递的ID加载对象,或者必须对数据库进行一些更改,或者通常都是.并且多个站点/项目通常不共享数据库,即使它们共享相同的应用程序,因此您需要将任务队列分开.

在这种情况下,通常会发生的是您使用多个交换设置单个消息代理(例如RabbitMQ).每个交换机都从单个站点接收消息.然后你在每个交换的某个地方运行一个或多个celeryd进程(在芹菜配置设置中,你必须指定交换.我不相信celeryd可以听多个交换).每个celeryd服务器都知道它的交换,它应该加载的应用程序,以及它应该连接的数据库.

为了管理这些,我会建议寻找到聚伞花序 -这是由@asksol和管理多个celeryd情况下,在多个服务器上,如果必要的.我没有尝试过,但它看起来应该处理不同实例的不同配置.