我想在同一台机器上运行两个芹菜实例。一个是我的应用程序的'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构造函数中更改一些内容,但我不知道要添加什么。
答案 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'),
)