2013-12-10 56 views
0

我一直在研究一个项目,它使用芹菜节拍进行调度任务。在本地,我一直在使用RabbitMQ作为经纪人,一切工作正常。无法让芹菜工人工作

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

celery beat流程接缝工作正常,因为我可以在控制台中看到它正在调度任务。但工人无法完成任务。当我通过在任务上使用delay()从shell异步调用任务时,即使此时该任务也不会被工作人员拾取。

我认为Redis可能会出现一些奇怪的现象。但是,这似乎并不是这种情况。我使我的项目在本地与Redis合作。在服务器上,当我将代理更改为RabbitMQ时,即使那样我也遇到了同样的问题。

我的本地机器上运行Mac OS和服务器运行的Debian 6

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

+0

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

回答

0

我想出了这个问题,结果是一个非常愚蠢的问题,反而表明我做了一个坏习惯。

我正在使用Gevent来测量服务器上的性能差异,以及我产卵的方式芹菜工人并不是正确的方式来处理Gevent代码。不是我不知道Celery在Gevent的命令行参数中需要一个标志,在本地机器上不使用相同的代码总是为我工作。我从未想到我使用Gevent并导致了这个问题。

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