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

如何调试rq入队的函数?VS Code中debugpy断点失效求助

解决RQ队列函数无法触发VS Code断点的问题

问题分析

核心矛盾在于:执行队列任务的RQ Worker是独立进程(或由Worker进程fork出的子进程),而你的调试器仅attach到了提交任务的主进程。debugpy无法自动将调试会话继承到fork后的进程或独立Worker进程,因此队列内函数的断点无法触发。

解决方案

需要单独为RQ Worker进程配置debugpy调试,具体步骤如下:

1. 用debugpy启动RQ Worker

停止原有的普通RQ Worker启动命令,改用debugpy启动并指定独立调试端口(避免和主进程冲突):

# 替换为你的Redis地址和目标队列名称
python3 -m debugpy --listen 0.0.0.0:5679 rq worker -u redis://redis:6379/0

2. 新增VS Code调试配置

在.vscode/launch.json中添加针对Worker进程的远程attach配置:

{
    "configurations": [
        // 保留原主进程调试配置
        {
            "name": "Python: Remote Attach",
            "type": "python",
            "request": "attach",
            "connect": {
                "host": "0.0.0.0",
                "port": 5678
            },
            "pathMappings": [
                {
                    "localRoot": "${workspaceFolder}",
                    "remoteRoot": "/app"
                }
            ],
            "justMyCode": true
        },
        // 新增Worker进程调试配置
        {
            "name": "Python: RQ Worker Remote Attach",
            "type": "python",
            "request": "attach",
            "connect": {
                "host": "0.0.0.0",
                "port": 5679
            },
            "pathMappings": [
                {
                    "localRoot": "${workspaceFolder}",
                    "remoteRoot": "/app"
                }
            ],
            "justMyCode": true
        }
    ]
}

3. 清理代码冗余调试逻辑

删除worker_function内的debugpy相关代码,Worker进程已由debugpy启动,会自动处理调试连接:

import rq

def worker_function():
    pass # 此处断点现在可正常触发

def parent_function(rq_queue: rq.Queue):
    rq_queue.enqueue(worker_function) # 主进程断点依然正常工作

4. 启动调试流程

  1. 用debugpy启动提交任务的主脚本:
    python3 -m debugpy --listen 0.0.0.0:5678 script.py
    
  2. 用debugpy启动执行任务的RQ Worker:
    python3 -m debugpy --listen 0.0.0.0:5679 rq worker -u redis://redis:6379/0
    
  3. 在VS Code中按需attach到主进程或Worker进程(仅调试队列函数的话,attach到Worker进程即可)。

额外说明

如果使用SimpleWorker,需在启动时明确指定,避免Worker fork子进程,进一步提升调试稳定性:

python3 -m debugpy --listen 0.0.0.0:5679 rq worker --worker-class=rq.SimpleWorker -u redis://redis:6379/0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 17:15:03