【问题标题】:Multiple celery server but same redis broker executing task twice多个 celery 服务器但相同的 redis 代理执行任务两次
【发布时间】:2014-12-17 04:41:16
【问题描述】:

当我检查celery -A proj inspect active_queues 时,我看到两台服务器显示它们正在侦听的队列,并且它们指向相同的默认队列名称celery。 django app 发出的任务仍然被两台服务器执行两次(每个 celery 服务器一次 - 所以两次)。

我可以看到传输类型也是direct - 默认值。

在我的本地任务上执行一次,所以我确信我的 django 应用程序只调用了一次任务。

我会在这里遗漏什么?

【问题讨论】:

  • 关闭这个问题,因为这是因为 celery 上的自定义包装器没有正确使用队列。和芹菜一点关系都没有。

标签: django celery


【解决方案1】:

好的,我查看了文档,我认为您需要在 settings.py 中设置 celerybeat-scheduler 以确保任务由单个调度程序进行调度。

http://celery.readthedocs.org/en/latest/configuration.html#celerybeat-scheduler

【讨论】:

  • mm 我想我不明白这一点。两个 celeryserver 都监听一个安装了 redis 的数据库服务器,redis 在1234 端口上运行,因此两个 celeryserver 将具有相同的BROKER_URLredis://:<password>@<databaseserver_ip>:<port>。你能详细说明你想说什么吗?
  • 这不是周期性任务吗?
【解决方案2】:

在 Redis 上,您可以为正在运行的应用程序设置当前数据库,设置数据库会将信息分开以使用不同的应用程序。

如果您使用的是 Django,则配置为 CELERY_BROKER_VHOST = {number of the database}
如果您不使用 Django,我相信配置是 CELERY_REDIS_DBredis_db,具体取决于您的 celery 版本

例如,您的第一个应用程序可能是CELERY_BROKER_VHOST = 1
第二个应用程序可能是CELERY_BROKER_VHOST = 2
对于您的本地开发可能是CELERY_BROKER_VHOST = 99

http://docs.celeryproject.org/en/latest/userguide/configuration.html#id8

【讨论】:

    猜你喜欢
    • 2021-09-28
    • 2014-09-14
    • 2014-10-23
    • 2014-03-01
    • 2014-12-10
    • 2019-06-11
    • 2015-08-19
    • 2023-03-24
    • 2020-07-01
    相关资源
    最近更新 更多