【问题标题】:Unable to get celery worker to work无法让芹菜工人工作
【发布时间】:2013-12-10 12:03:03
【问题描述】:

我一直在做一个使用 Celery beat 来安排任务的项目。在本地,我一直使用 RabbitMQ 作为代理,一切正常。

当我将项目推送到远程服务器时,我将代理更改为 Redis。

celery beat 进程可以正常工作,正如我在控制台中看到的那样,它正在调度任务。但工人无法接任务。当我通过在任务上使用 delay() 从 shell 异步调用任务时,即使这样,工作人员也不会拾取任务。

我认为 Redis 可能有些奇怪。然而,情况似乎并非如此。我让我的项目在本地使用 Redis。在服务器上,当我将代理更改为 RabbitMQ 时,即使这样我也遇到了同样的问题。

我的本​​地机器运行 Mac OS,服务器运行 Debian 6。

可能是什么问题?我如何调试这种情况并让工作人员消费任务并完成工作?我正在使用 Python 2.7。

【问题讨论】:

  • 我启动了我的工作进程,然后尝试从另一个进程(IPython shell)ping 工作进程,但没有得到任何响应。相反,在我的本地机器上这似乎有效,我得到了正在运行的工人列表。不知道发生了什么。

标签: python celery celerybeat


【解决方案1】:

我发现了这个问题,结果证明这是一个非常愚蠢的问题,而是表明我的做法很糟糕。

我使用 Gevent 来测量服务器上的性能差异,而我生成 Celery worker 的方式并不是处理 Gevent 代码的正确方式。并不是说我不知道​​ Celery 在 Gevent 的命令行参数中需要一个标志,而不是在本地机器上使用相同的代码总是对我有用。我从来没有想到我正在使用 Gevent,这就是导致问题的原因。

经过近 20 小时的调试、谷歌搜索和在 IRC 上聊天,一切都解决了。

【讨论】:

    猜你喜欢
    • 2017-08-04
    • 1970-01-01
    • 2014-08-17
    • 2015-10-26
    • 2022-01-08
    • 2014-06-09
    • 2019-03-13
    • 1970-01-01
    • 2016-04-02
    相关资源
    最近更新 更多