【问题标题】: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

    【讨论】:

      猜你喜欢
      • 2021-12-08
      • 2011-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-22
      • 2012-07-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多