如何在PyCharm中启用远程Celery调试?

49

我正在寻找如何在远程机器上的celery进程中启用PyCharm调试的指示。 远程计算机运行Ubuntu 14.04。

我正在运行PyCharm 4.x。

我看到其他一些信息暗示其他人已经使其工作,但是没有找到任何正确的说明。

11个回答

47
你可以创建一个“运行配置”来运行你的celery worker,然后通过点击“调试”按钮轻松进行调试。以下是我在PyCharm 5中设置的步骤:

pycharm celery

你需要设置一个远程Python解释器,然后像上面的图片一样设置其他配置。请注意,工作目录指向安装了celery的远程解释器的bin文件夹。

这个解决方案在PyCharm 2020 Pro中对我有效。编辑:我想工作目录是缺失的。 - safhac
我不得不在IntelliJ 2021.1中输入celery可执行文件的完整路径。 - Code-Apprentice

25

针对Windows系统,在使用 Celery >= 4.0 进行测试后:

添加一个新的(运行/调试)配置类型为 "Python":

然后,在配置选项卡下: 将第一个选项(要运行的目标)从 "脚本路径" 切换到 "模块名称" 并填写值:

celery.bin.celery

就像下面这张快照一样:

enter image description here


1
谢谢,我一直在寻找这个! - Pnia
5
谢谢,我发现必须添加“-P solo”。 - Dequn
5
我必须使用模块名称celery,而不是celery.bin.celery - youreyecheek

14

只需添加以下配置:

from celery import current_app
current_app.conf.CELERY_ALWAYS_EAGER = True
current_app.conf.CELERY_EAGER_PROPAGATES_EXCEPTIONS = True

这样做会使celery在与当前执行线程相同的线程中执行。


9

不幸的是,大多数解决方案在Windows上无法工作。(有一个专门讨论这个问题的问题,但不幸的是它被关闭为重复。因此,我现在会在这里回答那个问题。)

问题在于,在Windows上,独立的celery命令是批处理文件,因此PyCharm无法将Python调试器附加到它上面。

直到Celery 3.x,您可以创建一个manage.py运行配置,并在其上调用celery worker命令。

运行manage.py celery worker的PyCharm运行配置截图

请注意,您不需要在此处设置--app,因为应用程序由管理命令通过DJANGO_SETTINGS_MODULE定义。

不幸的是,celery管理命令是django-celery库的一个特性,该库不受Celery 4.x支持。迄今为止,我还没有找到Celery 4.x的解决方案。


3

我有PyCharm 2021.3(专业版)和我的库:

  • Python==3.8.9
  • celery==5.2.7

我使用的是macOS M1。我按照以下步骤解决了这个问题:

  1. 在选项 Run 中有 Edit Configurations..
  2. 点击蓝色箭头所示的 '+' 按钮,添加新配置。
  3. 添加Python配置。
  4. 选择配置 Module name 而不是 Script Path,如 Figure 中所示的红色箭头。
  5. 添加参数,例如 --workdir=/path/to/your_proj_direction -A your_proj.dir.celery_app worker -l info。它需要 --workdir 参数来处理celery路径。除此之外,您可以编写任何脚本来启动celery worker,而无需在开头加上 celery 一词。
  6. Python interpreter 添加为您的项目解释器。
  7. Working directory 添加到安装了celery库的虚拟环境路径中。
  8. 点击 Apply
  9. 您可以使用普通的Debug PyCharm调试此配置。如果您将配置作为Debug运行,PyCharm将启动celery worker,您可以进行调试。

图示:运行/调试配置


1
它还适用于 PyCharm 2023.2.3(专业版)!谢谢! - undefined

2
在Windows上,在Pycharm的调试配置中添加以下参数。
-A YouAppName worker  --loglevel=debug -P solo --without-gossip --without-mingle --without-heartbeat

2

补充@Assam的答案:

在Linux/Ubuntu上,只需选择“脚本路径->模块名称”=celery即可解决问题。

[1]: https://stackoverflow.com/users/149556/assem


2
如果您正在为Celery使用Gevent,请不要忘记检查“首选项>构建、执行、部署>Python调试器>Gevent兼容”复选框。

救命的注释 - vicusbass

1

使用venv时,在Mac上配置celery的示例设置。

其中参数app是来自您的Python代码中Celery对象的名称。

app = Celery('project')

Configuration settings celery for mac


1
我正在使用PyCharm 2017,并且需要做类似于上面答案的事情,但是我必须在“脚本”字段中指定celery的完整/绝对路径名称。
另外,我不确定PyCharm 4是否有此功能,但更新版本允许您通过转到“运行”>“附加到本地进程...”直接附加到正在运行的Python进程。
这使您可以以前的方式运行celery(例如在终端中),然后允许Pycharm接管。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接