在同一台服务器上运行多个芹菜实例

时间:2013-04-24 19:26:02

标签: python celery

我想在同一台机器上运行两个芹菜实例。一个是我的应用程序的'A'版本,另一个是'B'版本。

我有两个实例,我这样开始:

(env1)/home/me/firstapp$ celery -A app.tasks worker --config celeryconfig
(env2)/home/me/secondapp$ celery -A app.tasks worker -n Carrot --config celeryconfig

在每个应用程序的tasks.py中,我创建一个像这样的芹菜实例:

 celery = Celery('tasks', backend='amqp', broker='amqp://guest@127.0.0..1.5672//')
 @celery.task
 def run_a_task():
     do_stuff()

在env2的task.py中,如何指定我想使用secondapp(名为Carrot)的第二个芹菜实例,而不是firstapp的第一个芹菜实例?我怀疑我需要在第一行的celery构造函数中更改一些内容,但我不知道要添加什么。

2 个答案:

答案 0 :(得分:11)

我通过使用芹菜的虚拟主机解决了这个问题。

Rabbitmq服务器运行后,我发出以下命令:

rabbitmqctl add_user user password
rabbitmqctl add_vhost app2
rabbitmqctl set_permissions -p app2 user ".*" ".*" ".*"

然后我开始芹菜:

celery -A tasks worker --broker=amqp://user:password@localhost/app2

根据我的任务,我像这样初始化芹菜对象:

celery = Celery('tasks', backend='amqp', broker='amqp://user:password@localhost:5672/app2

答案 1 :(得分:6)

看起来你正在使用AMQP所以我建议使用不同的交换来解决这个问题。

我建议您阅读有关AMQP结构的博文:http://blogs.digitar.com/jjww/?s=rabbits&x=0&y=0

有关Celery的具体信息,请查看此处:http://docs.celeryproject.org/en/latest/userguide/routing.html

您可以执行的简短版本是为应用程序提供不同的默认队列:

from kombu import Exchange, Queue

CELERY_DEFAULT_QUEUE = 'app1'
CELERY_QUEUES = (
    Queue('app1', Exchange('app1'), routing_key='app1'),
)