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

mun*_*unk 7 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
Run Code Online (Sandbox Code Playgroud)

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

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

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

mun*_*unk 12

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

一旦rabbitmq服务器运行,我发出以下命令:

rabbitmqctl add_user user password
rabbitmqctl add_vhost app2
rabbitmqctl set_permissions -p app2 user ".*" ".*" ".*"
Run Code Online (Sandbox Code Playgroud)

然后我开始芹菜:

celery -A tasks worker --broker=amqp://user:password@localhost/app2
Run Code Online (Sandbox Code Playgroud)

有了我的任务,我就像这样初始化芹菜对象:

celery = Celery('tasks', backend='amqp', broker='amqp://user:password@localhost:5672/app2
Run Code Online (Sandbox Code Playgroud)

  • 我如何使用 redis 做同样的事情? (2认同)
  • @IzzoObella 如果您将其作为问题发布,您的运气会更好。 (2认同)

Wol*_*lph 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'),
)
Run Code Online (Sandbox Code Playgroud)