我一直致力于一个使用Celery beat来安排任务的项目。在本地,我一直在使用RabbitMQ作为经纪人,一切正常。
当我将项目推送到远程服务器时,我将代理更改为Redis。
celery beat
进程可以正常工作,因为我在控制台中可以看到它正在安排任务。但工人无法接受任务。当我通过在任务上使用delay()从shell异步调用任务时,即使这样,任务也不会被工作人员接收。
我认为Redis可能会有些奇怪。但是,情况似乎并非如此。我让我的项目在本地使用Redis。在服务器上,当我将代理更改为RabbitMQ时,即便如此,我也遇到了同样的问题。
我的本地计算机运行Mac OS,服务器运行Debian 6.
可能是什么问题?如何调试这种情况,让工作人员消耗任务并完成工作?我使用的是Python 2.7。
答案 0 :(得分:0)
我发现了问题并且结果证明这是一个非常愚蠢的问题,而是表明我的做法很糟糕。
我使用Gevent测量服务器上的性能差异以及我产生Celery工作者的方式不是处理Gevent代码的正确方法。并不是说我不知道Celery在Gevent的命令行参数中需要一个标志,而不是在本地机器上使用相同的代码总是为我工作。我从未想到我正在使用Gevent,这导致了这个问题。
在IRC上进行了近20个小时的调试,谷歌搜索和聊天后,所有人都解决了。