【问题标题】:How to set up a distributed worker pool with Celery and RabbitMQ如何使用 Celery 和 RabbitMQ 设置分布式工作池
【发布时间】:2016-12-01 14:38:06
【问题描述】:
我对这种事情还是很陌生,所以我完全有可能搞错了。
我正在尝试建立一个分布式任务系统。我有一个使用 Celery 生成任务的 Django webapp。现在,我的 webapp、worker 和 RabbitMQ 都在同一台服务器上运行。我想将它分发到多台服务器。
据我目前理解,我应该能够让我的 webapp 生成任务,将它们交给消息队列——它是它自己的服务器——然后工作人员分布在任意数量的服务器将使用该队列中的任务。我知道如何告诉我的 Django 应用程序哪个服务器是代理,但是如何在工作服务器上启动工作线程并指示他们从哪里消费任务?我完全迷路了——我什至不知道去哪里找。
【问题讨论】:
标签:
python
django
rabbitmq
celery
【解决方案1】:
您可以像这样运行您的工作代码 (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
请注意,您已正确设置代理的 url,而不是 localhost