Python中如何使用PyCharm调试Celery分布式任务队列?

我想调试 worker 里面的任务,找了好久还是没有找到办法。。有大佬知道么。。


Python中如何使用PyCharm调试Celery分布式任务队列?
31 回复

和单独启动一个 App 没区别,直接在 pycharm 命令行中启动 celery 就可以


在PyCharm里调试Celery任务,关键是要正确配置远程调试器。我通常用pydevd-pycharm这个包。

首先,在PyCharm里设置一个“Attach to Process”的调试配置,用默认的端口(比如5678)。然后在你的Celery任务代码开头加上这几行:

import pydevd_pycharm
pydevd_pycharm.settrace('localhost', port=5678, stdoutToServer=True, stderrToServer=True)

启动你的Celery worker,当任务执行到settrace()这行时,它就会连接到PyCharm的调试器,然后你就能像调试本地代码一样设断点、单步执行了。

注意,调试器连接后任务会暂停,直到你在PyCharm里继续执行。生产环境别这么干。

总结:用pydevd配置远程调试连接。

请问具体怎么启动呢。。大佬谢谢

我在 pycharm 中启动了 worker 但是怎么打断点调试呢。。

在右上角的 edit configurations 里面应该可以设置程序的启动方式吧,在里面设置好启动 celery 的命令然后使用 pycharm 来启动应用应该就可以了

我尝试过你说的方法 但是在 [Script] 那个位置 我不知道怎么写,我找不到启动 worker 的脚本

你把命令写脚本里不就行了?😥

不行


Connected to pydev debugger (build 145.971)
Traceback (most recent call last):
File “C:\Program Files (x86)\JetBrains\PyCharm 2016.1.3\helpers\pydev<a target=”_blank" href=“http://pydevd.py” rel=“nofollow noopener”>pydevd.py", line 1531, in <module>
globals = debugger.run(setup[‘file’], None, None, is_module)
File “C:\Program Files (x86)\JetBrains\PyCharm 2016.1.3\helpers\pydev<a target=”_blank" href=“http://pydevd.py” rel=“nofollow noopener”>pydevd.py", line 938, in run
pydev_imports.execfile(file, globals, locals) # execute the script
IOError: [Errno 2] No such file or directory: 'celery -A ics.task.example.baidu_news_task worker -E -Q baidu_news_queue -n baidu_news.%h -l info’

Process finished with exit code 1

这个位置 必须是一个脚本吧。。

celery 有多线程模式的,比多进程调试要方便很多

是这样,那个位置就是个 py 文件,然后你把用 os 来执行 celery 的启动命令。

我试了 不行啊 进不了断点

#7,你这个报错,如果是在 Linux 下,用 celery 命令所在的全路径。如:/usr/local/bin/celery

我现在是在 windows 我找到了 celery.exe 那个地方我填写 E:\Python27\Scripts\celery.exe
但是还是不行


Connected to pydev debugger (build 145.971)
Traceback (most recent call last):
File “C:\Program Files (x86)\JetBrains\PyCharm 2016.1.3\helpers\pydev<a target=”_blank" href=“http://pydevd.py” rel=“nofollow noopener”>pydevd.py", line 1531, in <module>
globals = debugger.run(setup[‘file’], None, None, is_module)
File “C:\Program Files (x86)\JetBrains\PyCharm 2016.1.3\helpers\pydev<a target=”_blank" href=“http://pydevd.py” rel=“nofollow noopener”>pydevd.py", line 938, in run
pydev_imports.execfile(file, globals, locals) # execute the script
File “E:/Python27/Scripts/celery.exe”, line 1
SyntaxError: Non-ASCII character ‘\x90’ in file E:/Python27/Scripts/celery.exe on line 1, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

Process finished with exit code 1

这个错。。意思这个还必须是个脚本。。exe 不行

兄弟 我的是 windows。。

接#12,默认的多进程调试也是可以的。但是如果一次发多个任务,每个任务都要调试的话,需要在 pycharm 里面手动找到接收了任务的进程,然后切换并调试。

你 windows,应该是 exe 就可以了。你截图一下调试的配置

恩 明白,但是我现在不知道如何调试。。大佬能给仔细说说吗 谢谢!
我是 windows 没有 /usr/local/bin/celery 只有 E:\Python27\Scripts\celery.exe


[Script] E:\Python27\Scripts\celery.exe
[Script parameters] -A ics.task.example.baidu_news_task worker -E -Q baidu_news_queue -n baidu_news.%h -l info

看你的#16 报错,pycharm 解析路径的时候有点问题。
两种方法试一下。1, 不直接填写 celery 路径,用后面的按钮,直接选择你对应路径下的 celery ; 2, 把这个路径配置到你的 windows 环境变量中,然后 script 那里直接填 celery。

换个思路, 可以直接在解释器里同步调用任务就可以了,断点用 ipdb 好了

谢谢大家,已经找到在 window 下面的解决办法了
https://www.e-learn.cn/content/wangluowenzhang/342882
windows 下不支持楼上说的方法来调试
所以采用曲线救国 使用 django 的 manage.py 来启动 worker 就可以调试了!!!

我记得 celery 已经放弃支持 windows,LZ 有大概率会碰到无法解释的 bug

print 大法好

celery flower -A xxx --broker=redis://127.0.0.1:6379 你先 terminal 连 redis,
然后 terminal 起一个 worker celery -A xxx worker --loglevel=info, 然后正常打断点开 debug 模式调试就行了

你用 Windows ? celery 4.x 新版已经不支持 Windows。Linux 的话,pycharm 直接用 celery 的启动入口来启动是可以断电调试的,但如果 Windows 是 celery.exe 的这种二进制的话,我就不懂了。

Celery Debug 采用 rdb 形式,方便快捷

https://www.168seo.cn/python-2/25027.html

mac 可以调试,win 下面目前还是无法调试

回到顶部