【问题标题】:Celery cannot find a worker芹菜找不到工人
【发布时间】:2016-09-08 19:57:16
【问题描述】:

我正在使用具有这种配置的 celery

default_exchange = Exchange('default', type='direct')
latest_exchange = Exchange('latest', type='direct')

shared_celery_config = {
    'BROKER_URL': 'redis://localhost:6379/0',
    'CELERY_RESULT_BACKEND': 'redis://localhost:6379/0',
    'CELERY_DEFAULT_EXCHANGE': 'default',
    'CELERY_DEFAULT_ROUTING_KEY': 'default',
    'CELERY_DEFAULT_QUEUE': 'default',
    'CELERY_QUEUES': (
        Queue('default', default_exchange, routing_key='default'),
        Queue('latest', latest_exchange, routing_key='latest'),
    ),
}

celery = Celery('tasks', config_source=shared_celery_config)

但是当我创建一个任务时,没有一个工作人员正在使用它,也没有任何反应。我开始工人: celery worker -A tasks --loglevel=debug --hostname=worker1。我可以从ps aux | grep celery 输出中看到它们,但是当执行一些命令以获取像celery -A tasks status 这样的统计信息时,我收到以下错误消息 Error: No nodes replied within time constraint.。因此,所有任务都处于 PENDING 状态。我相信这是一些错误配置,但无法弄清楚出了什么问题以及如何调试这样的事情。任何建议都会非常有帮助

【问题讨论】:

  • 我的环境billiard==3.3.0.23 kombu==3.0.35 celery==3.1.23 ,Python 2.7.6
  • 当我升级到billiard==3.5.0.1 时,我能够启动命令celery -A tasks status 并收到适当的答案1 node online.

标签: python python-2.7 celery python-2.x celeryd


【解决方案1】:

问题已解决。我有一个使用 gevent 的 Web 应用程序,在 tasks 模块中我从另一个具有 monkey.patch_all() 的模块导入。不知何故,它阻止了台球,因此阻止了工作人员启动池,这导致了这种后果。 无论如何,根本不要使用 gevent,恕我直言。

【讨论】:

    猜你喜欢
    • 2019-03-13
    • 1970-01-01
    • 2014-08-17
    • 2022-01-08
    • 2014-06-09
    • 1970-01-01
    • 2018-07-10
    • 2016-04-18
    • 2021-10-24
    相关资源
    最近更新 更多