我正在尝试找到一些有关如何在远程计算机上的 celery 进程中启用 PyCharm 调试的说明。远程计算机正在运行 Ubuntu 14.04。
我正在运行 PyCharm 4.x。
我已经看到一些其他信息暗示其他人可以正常工作,但无法找到任何正确的说明。
只需添加以下配置:
from celery import current_app
current_app.conf.CELERY_ALWAYS_EAGER = True
current_app.conf.CELERY_EAGER_PROPAGATES_EXCEPTIONS = True
这样做会使 celery 在与当前执行线程相同的线程中执行。
不幸的是,大多数解决方案不适用于 Windows。 (有一个专门针对此问题的单独问题,但不幸的是,它作为该问题的重复项而被关闭。所以我现在在这里回答这个问题。)
问题在于,在 Windows 上,独立的 celery 命令是一个批处理文件,因此 PyCharm 无法将 Python 调试器附加到它。
直到 Celery 3.x,您都可以创建
manage.py
运行配置并对其调用 celery worker
命令。
请注意,您不需要在此处设置
--app
,因为应用程序是由管理命令通过 DJANGO_SETTINGS_MODULE
定义的。
不幸的是,
celery
管理命令是django-celery
库的一项功能,Celery 4.x不支持该功能。到目前为止,我还没有找到 Celery 4.x 的解决方案。
我有PyCharm 2021.3(专业版)和我的库:
我使用 macOS M1。我按照以下步骤解决了这个问题:
Edit Configurations..
中有Run
。'+'
按钮并添加新配置。Module name
而不是 Script Path
,如Figure
中的红色箭头所示。Parameters
,如--workdir=/path/to/your_proj_direction -A your_proj.dir.celery_app worker -l info
。 celery 句柄路径需要 --workdir
参数。除此之外,您编写任何脚本来启动 celery Worker,开头不带 celery
单词。Python interpreter
作为您的项目解释器。Working directory
添加到安装了 celery 库的虚拟环境路径中。Apply
。在 Windows 中,在 Pycharm 的调试配置中添加以下参数
-A YouAppName worker --loglevel=debug -P solo --without-gossip --without-mingle --without-heartbeat
如果您使用 Gevent for Celery,请不要忘记选中
Preferences > Build, Execution, Deployment > Python Debugger > Gevent Compatible
复选框。
我正在使用 PyCharm 2017,并且必须执行与上面的答案非常相似的操作,但我特别必须将完整/绝对路径名放入“脚本”字段中的
celery
另外,我不确定 PyCharm 4 是否具有此功能,但较新的版本允许您通过转到“运行”>“附加到本地进程...”来直接附加到正在运行的 python 进程...
这允许您以之前的方式运行 celery(也许在终端中),然后允许 Pycharm 接管
我的工作配置:
/home/app/env/bin/celery
脚本参数:
worker -B -n qrc -Q qrc -l info --app=backend.celery
-B
代表芹菜甜菜,
-n
是节点名称,
-Q
是队列名称,
-l
是日志级别,并且
--app
是应用程序名称,在我的例子中,是一个 Django 应用程序,其 celery.py 位于 settings.py 旁边。工作目录:
/home/app/server/
即我的django根文件夹