如何用Python在VSCode中调试Celery程序

用 rdb 太累,http://docs.celeryproject.org/en/latest/userguide/debugging.html

但是怎么才能在 VSCode 中调试 Celery 的程序呢。


如何用Python在VSCode中调试Celery程序
4 回复

pycharm 好像直接打断点就可以。vscode 就不行,需要做什么配置吗?


在VSCode里调试Celery程序,核心是配置好launch.json,让调试器能正确附加到Celery worker进程上。这里给你一个最直接有效的配置方法。

首先,在你的项目根目录下的.vscode文件夹里,创建或修改launch.json文件。关键是要使用“attach”模式,并指定正确的进程ID(PID)。Celery worker启动时会打印其PID,你需要用这个PID来附加调试器。

一个更实用的方法是使用“Python: Module”配置来直接启动并调试worker。下面是一个完整的launch.json配置示例:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: Celery Worker",
            "type": "python",
            "request": "launch",
            "module": "celery",
            "args": [
                "-A", "your_project.celery_app", "worker",
                "--loglevel=info",
                "--pool=solo" // 使用solo池简化调试,避免多进程问题
            ],
            "console": "integratedTerminal",
            "justMyCode": false // 如果你想进入Celery库内部代码,设为false
        }
    ]
}

配置说明:

  1. "module": "celery":告诉调试器运行celery模块。
  2. "args":这里的参数就是你在命令行启动worker时用的。将your_project.celery_app替换成你项目中Celery应用实例的实际导入路径(例如myapp.celery)。
  3. "--pool=solo"这是调试的关键。Celery默认使用prefork等多进程池,调试器很难处理。solo池让worker运行在单个进程中,完美兼容调试。
  4. "justMyCode": false:允许调试器步入Celery或其他第三方库的源代码。如果你只想调试自己的代码,可以设为true

如何使用:

  1. 确保你的Celery应用配置正确,并且任务代码中已经设置好了断点。
  2. 在VSCode的“运行和调试”侧边栏,选择“Python: Celery Worker”配置。
  3. 点击绿色开始按钮(或按F5)。VSCode会启动一个集成终端,运行celery worker命令。
  4. 当你的任务被触发执行并遇到断点时,程序就会暂停,你可以像调试普通Python脚本一样查看变量、单步执行。

替代方案(附加到已运行的进程): 如果你必须调试一个已经运行在生产模式(例如使用prefork池)的worker,可以这样做:

  1. launch.json中添加一个“Python: Attach using Process Id”配置。
  2. 启动你的Celery worker,记下它的主进程PID(通常会在启动日志中显示 [INFO/MainProcess] Connected to ... 之类的行附近)。
  3. 在VSCode中选择“附加到进程”配置,输入PID。
  4. 这种方法更复杂,且对多进程支持不完善。强烈推荐使用上面的solo池方法进行开发调试。

总结一下,用solo池模式启动worker是VSCode调试Celery最省事的方法。

不用这么麻烦,把 task 任务的函数去掉 delay 就是在本地运行的。直接在本地调试完成后在添加 delay 运行即可。

我知道这样,但是这样也很麻烦,毕竟你自己要给函数传参,可能对一个陌生的程序,我根本不知道参数是什么。我想要的就是 web 运行起来,然后调某个 celery 的 task,然后就可以在这个 task 里面 debug。

回到顶部