【问题标题】:Using celeryd as a daemon with multiple django apps?使用 celeryd 作为多个 django 应用程序的守护进程?
【发布时间】:2012-04-19 18:23:14
【问题描述】:

我刚开始使用django-celery,我想将 celeryd 设置为守护进程运行。但是,instructions 似乎表明一次只能为一个站点/项目配置它。 celeryd 可以处理多个项目,还是只能处理一个?而且,如果是这种情况,是否有一种干净的方法可以将 celeryd 设置为为每个配置自动启动,这需要我为每个配置创建一个单独的 init 脚本?

【问题讨论】:

    标签: daemon celery django-celery celeryd


    【解决方案1】:

    就像所有有趣的问题一样,答案是视情况而定。 :)

    绝对有可能想出一个场景,两个独立的站点都可以使用 celeryd。如果多个站点正在向同一个交易所提交任务,并且这些任务不需要访问任何特定的数据库——例如,它们对电子邮件地址、信用卡号或数据库记录以外的其他东西进行操作——那么一个 celeryd 可能就足够了。只需确保任务代码位于所有站点和 celery 服务器加载的共享模块中即可。

    不过,通常情况下,您会发现 celery 需要访问数据库——它要么根据作为任务参数传递的 ID 加载对象,要么必须将一些更改写入数据库,或者,大多数通常,两者兼而有之。并且多个站点/项目通常不共享数据库,即使它们共享相同的应用程序也是如此,因此您需要将任务队列分开。

    在这种情况下,通常会发生的情况是您设置了具有多个交换的单个消息代理(例如 RabbitMQ)。每个交换从一个站点接收消息。然后你在某处为每个交换运行一个或多个 celeryd 进程(在 celery 配置设置中,你必须指定交换。我不相信 celeryd 可以监听多个交换)。每个 celeryd 服务器都知道它的交换、它应该加载的应用程序以及它应该连接到的数据库。

    要管理这些,我建议查看cyme -- 它由@asksol 提供,并在必要时在多台服务器上管理多个 celeryd 实例。我没试过,但它看起来应该为不同的实例处理不同的配置。

    【讨论】:

      【解决方案2】:

      没有尝试但使用不需要 django-celery 的 Celery 3.1.x,根据文档,您可以像这样实例化 Celery 应用程序:

      app1 = Celery('app1')
      
      app1.config_from_object('django.conf:settings')
      app1.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
      
      
      @app.task(bind=True)
      def debug_task(self):
          print('Request: {0!r}'.format(self.request))
      

      但是您可以使用 celery multi 来启动多个具有单个配置的工作人员,您可以查看示例 here。因此,您可以使用不同的 --app appX 参数启动多个工作程序,以便使用不同的任务和设置:

      # 3 workers: Two with 3 processes, and one with 10 processes.
      $ celery multi start 3 -c 3 -c:1 10
      celery worker -n celery1@myhost -c 10 --config celery1.py --app app1
      celery worker -n celery2@myhost -c 3  --config celery2.py --app app2
      celery worker -n celery3@myhost -c 3  --config celery3.py --app app3
      

      【讨论】:

        猜你喜欢
        • 2012-10-13
        • 2011-10-02
        • 1970-01-01
        • 2013-05-29
        • 1970-01-01
        • 2023-03-02
        • 1970-01-01
        • 2014-11-24
        • 2016-10-07
        相关资源
        最近更新 更多