问题解决:pycharm debug断点调试时遇到Pycharm DataLoader会卡死(num_works参数 多进程的坑点)

问题描述

下面的代码,我在pycharm点run是可以正常运行的,但是加了断点调试后就出现了在DataLoader处卡住的问题

import torch
import numpy as np


# 定义GetLoader类,继承Dataset方法,并重写__getitem__()和__len__()方法
class GetLoader(torch.utils.data.Dataset):
	# 初始化函数,得到数据
    def __init__(self, data_root, data_label):
        self.data = data_root
        self.label = data_label
    # index是根据batchsize划分数据后得到的索引,最后将data和对应的labels进行一起返回
    def __getitem__(self, index):
        data = self.data[index]
        labels = self.label[index]
        return data, labels
    # 该函数返回数据大小长度,目的是DataLoader方便划分,如果不知道大小,DataLoader会一脸懵逼
    def __len__(self):
        return len(self.data)

a = torch.tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9],
                  [1, 2, 3], [4, 5, 6], [7, 8, 9],
                  [1, 2, 3], [4, 5, 6], [7, 8, 9],
                  [1, 2, 3], [4, 5, 6], [7, 8, 9]])
b = torch.tensor([44, 55, 66,
                  44, 55, 66,
                  44, 55, 66,
                  44, 55, 66])

torch_data = GetLoader(a, b)

torch_data[0:2]
# (tensor([[1, 2, 3],
#          [4, 5, 6]]),
#  tensor([44, 55]))

from torch.utils.data import DataLoader

# 读取数据
datas = DataLoader(torch_data, batch_size=5, shuffle=True, drop_last=False, num_workers=2)

for i, data in enumerate(datas):
    # i表示第几个batch, data表示该batch对应的数据,包含data和对应的labels
    print("第 {} 个Batch \n{}".format(i, data))

Debug模式

第一次进入到这个位置是可以的,但是继续Step Over,进行for循环时,会卡住,程序一直在运行状态!
在这里插入图片描述

在这里插入图片描述

解决方法

把DataLoader中的参数num_workers 设为 0即可

参考资料

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

捡起一束光

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值