我正在使用PyCharm并且注意到当我将调试器附加到芹菜工作进程时我的任务没有完成并且此错误被记录到控制台:
Traceback (most recent call last):
File "<string>", line 1, in <module>
ImportError: No module named pydevd
当调用芹菜任务时,也会记录此消息:
[2013-03-24 05:24:26,336: INFO/MainProcess] Got task from broker: celery.group[91218981-204a-414c-a674-fcd8e2b22d23]
但是,此任务实际上从未完成。
这是用于将PyCharm中的pydevd调试器附加到我的芹菜工作进程的实际命令:
/home/scottc/venv/myproj/bin/python home/scottc/.IntelliJIdea12/config/plugins/python/helpers/pydev/pydevd.py --multiproc --client 127.0.0.1 --port 60283 --file manage.py celeryd -E -B --loglevel=INFO
当我只是在没有在PyCharm中附加调试器的情况下运行该过程时,将永远不会显示ImportError消息,并且我的任务确实完成了。
最后,我知道在我的路径中找到了pydevd,因为我可以手动输入以下代码:
from pydev import pydevd
pydevd.settrace('my_host', port=5643, stdoutToServer=True, stderrToServer=True)
并且调试器将成功附加。但问题是,这比设置一些断点并点击PyCharm中的“debug”要方便得多。
答案 0 :(得分:1)
当我升级芹菜和台球时,这个问题就消失了:
billiard==2.7.3.23
celery==3.0.17
答案 1 :(得分:1)
对于调试celery,我发现添加以下配置更简单:
from celery import current_app
current_app.conf.CELERY_ALWAYS_EAGER = True
current_app.conf.CELERY_EAGER_PROPAGATES_EXCEPTIONS = True
这使芹菜在与当前正在执行的线程相同的线程中运行。