如何在远程系统上配置和运行celery worker

时间:2014-11-18 04:45:11

标签: python django celery

我正在研究芹菜并使用rabbitmq服务器并在服务器中的django项目中创建了一个项目(消息队列,数据库存在)并且它工作正常,我也创建了多个工作者

from kombu import Exchange, Queue
CELERY_CONCURRENCY = 8

CELERY_ACCEPT_CONTENT = ['pickle', 'json', 'msgpack', 'yaml']

CELERY_RESULT_BACKEND = 'amqp'
CELERYD_HIJACK_ROOT_LOGGER = True
CELERY_HIJACK_ROOT_LOGGER = True
BROKER_URL = 'amqp://guest:guest@localhost:5672//'

CELERY_QUEUES = (
  Queue('default', Exchange('default'), routing_key='default'),
  Queue('q1', Exchange('A'), routing_key='routingKey1'),
  Queue('q2', Exchange('B'), routing_key='routingKey2'),
)
CELERY_ROUTES = {
 'my_taskA': {'queue': 'q1', 'routing_key': 'routingKey1'},
 'my_taskB': {'queue': 'q2', 'routing_key': 'routingKey2'},
}


AMQP_SERVER = "127.0.0.1"
AMQP_PORT = 5672
AMQP_USER = "guest"
AMQP_PASSWORD = "guest"
AMQP_VHOST = "/"`


CELERY_INCLUDE = ('functions')

`

但我想从另一台服务器运行工作人员。所以我需要一些关于如何在另一个系统中运行一个工作人员的信息,当我提到几个网站时,它说我们需要在远程系统上运行django项目也是它必要?

4 个答案:

答案 0 :(得分:31)

以下是这个想法的要点:

在机器A上:

  1. 安装Celery&的RabbitMQ。
  2. 配置rabbitmq以便机器B可以连接到它。
  3. 使用某些任务创建my_tasks.py并将一些任务放入队列。
  4. 在机器B上:

    1. 安装芹菜。
    2. 将my_tasks.py文件从机器A复制到此计算机。
    3. 运行工作人员以使用任务
    4. 我有同样的要求,并尝试芹菜。这样做要容易得多。几天前我写了一篇详细的博客文章。查看how to send tasks to remote machine?

答案 1 :(得分:9)

您可以在django项目中使用app.send_task()之类的内容:

from celery import Celery
import my_client_config_module

app = Celery()
app.config_from_object(my_client_config_module)

app.send_task('dotted.path.to.function.on.remote.server.relative.to.worker',
              args=(1, 2))

答案 2 :(得分:2)

首先,想一想芹菜是如何起作用的?

Celery生产者将一个任务添加到具有名称和其他重要标题的队列中,以识别您的任务的位置。

Celery不会向MQ添加完整的可执行函数。

所以,当你看工人(消费者)时。

Celery从MQ获取任务详细信息并尝试运行它。 要运行此任务,应该有可用的模块/文件/环境/代码库来执行此任务。

现在让我们来看看你的问题......

您尝试在单独的计算机上设置工作程序,以便逻辑上执行您需要完整代码任务环境的任务所指向的功能,您应该将MQ与任务所在的MQ连接(否则将如何从MQ获取任务?)

答案 3 :(得分:1)

基本上我会接受ChillarAnand的回答。我想对他的答案加上评论,但我不能因为我没有50的声誉。

所以...

你问题的答案......

首先,您想阅读"how to send tasks to remote machine?",作为 提到ChillarAnand

这是一篇非常好的文章,有一个小缺陷,比如函数def add()中的“没有'@ app.task',在内容remote.py”中,它引起了问题,让我感到困惑新手到芹菜。

答案“[Errno 113]无路由主持人。”部分,

我猜...我猜你的rabbitmq服务器上运行了防火墙, 你可能想要一张支票。大多数时候,它是iptables,但它可能是别的东西。关闭它,或更改规则。然后你可以再试一次。