0

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

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

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

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

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

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

4

1 回答 1

0

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

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

经过近 20 小时的调试、谷歌搜索和在 IRC 上聊天后,所有问题都解决了。

于 2013-12-10T22:04:06.630 回答