You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在VS Code中调试Buildout构建的Python2.7 Celery后台任务?

解决方案

1. 前置准备

  • 确保VS Code已成功连接到Docker容器,容器内安装Python 2.7兼容的调试器ptvsd(版本需≤4.3.2,执行pip install ptvsd==4.3.2完成安装)
  • 确认Buildout生成的bin/django脚本可执行,且容器内项目根目录与VS Code工作区路径一致

2. 调试Django Web服务器的launch.json配置

适配Buildout生成的启动脚本,配置如下:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Django (Buildout)",
            "type": "python",
            "request": "launch",
            "program": "${workspaceFolder}/bin/django",
            "args": [
                "runserver",
                "0.0.0.0:8000",
                "--noreload"
            ],
            "pythonPath": "${workspaceFolder}/bin/python",
            "console": "integratedTerminal",
            "env": {
                "PYTHONPATH": "${workspaceFolder}"
            },
            "justMyCode": false
        }
    ]
}
  • --noreload:禁用Django自动重载,避免调试器进程被重启导致断开
  • pythonPath:指定Buildout隔离环境的Python解释器,确保加载正确依赖

3. 调试Celery后台任务的两种配置

3.1 直接调试指定任务(同步执行)

针对你提供的bin/django test_task TaskName --start命令,配置如下:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Celery Task (Direct)",
            "type": "python",
            "request": "launch",
            "program": "${workspaceFolder}/bin/django",
            "args": [
                "test_task",
                "TaskName",
                "--start"
            ],
            "pythonPath": "${workspaceFolder}/bin/python",
            "console": "integratedTerminal",
            "env": {
                "PYTHONPATH": "${workspaceFolder}",
                "CELERY_ALWAYS_EAGER": "true"
            },
            "justMyCode": false,
            "stopOnEntry": false
        }
    ]
}
  • CELERY_ALWAYS_EAGER=true:强制Celery任务同步执行,无需单独启动worker,简化调试流程

3.2 调试Celery Worker异步任务

如果需要调试Worker执行的异步任务,配置如下(需替换为你的项目名):

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Celery Worker",
            "type": "python",
            "request": "launch",
            "program": "${workspaceFolder}/bin/django",
            "args": [
                "celery",
                "-A", "your_project_name",
                "worker",
                "--loglevel=info",
                "--concurrency=1"
            ],
            "pythonPath": "${workspaceFolder}/bin/python",
            "console": "integratedTerminal",
            "env": {
                "PYTHONPATH": "${workspaceFolder}"
            },
            "justMyCode": false
        }
    ]
}
  • --concurrency=1:使用单进程Worker,避免多进程调试混乱
  • 若Buildout生成了独立的bin/celery脚本,可将program改为${workspaceFolder}/bin/celery

4. 核心注意事项

  • 所有配置中的路径需与容器内项目实际路径一致,VS Code连接容器时要正确映射工作区
  • 若需调试第三方依赖(如Celery源码),务必将justMyCode设为false
  • Python 2.7不支持debugpy,必须使用ptvsd作为调试器

内容的提问来源于stack exchange,提问作者KED

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 14:05:33