如何使用Celery和RabbitMQ设置分布式工作池

时间:2016-07-27 14:11:16

标签: python django rabbitmq celery

我对这种事情还很陌生,所以我完全有可能弄错了。

我正在尝试建立一个分布式任务系统。我有一个使用Celery生成任务的Django webapp。现在,我有webapp,worker和RabbitMQ在同一台服务器上运行。我想将它分发给几台服务器。

当我当前了解它时,我应该可以让我的webapp生成任务,将它们交给消息队列 - 这是它自己的服务器 - 然后分布在任意数量的工作人员服务器将使用该队列中的任务。我知道如何告诉我的Django应用程序哪个服务器是代理,但是如何在工作服务器上启动工作线程并指示它们从何处使用任务?我完全迷失了 - 我甚至不知道在哪里看。

1 个答案:

答案 0 :(得分:2)

您可以像这样运行您的工作人员代码(async_tasks.py):

from celery import Celery
app = Celery('tasks', broker=broker_url)

@app.task(queue='queue_name')
def async_compute_something(input):
    # do something 
    return "Result"

在使用此命令的其他计算机上:

celery -A async_tasks worker -Q queue_name

请注意,您已正确设置代理的网址,而不是localhost