DataLoader windows平台下 多线程读数据报错 | BrokenPipeError: [Errno 32] Broken pipe | freeze_support()

DataLoader 多线程读取数据

使用DataLoader读取数据时,为了加快效率,所以使用了多个线程,即num_workers不为0,在windows下报了错误。

DataLoader(trainset, batch_size=128, shuffle=True, num_workers=2) 

https://github.com/pytorch/pytorch/pull/5585 这里是官方说明了一些原因,应该是windows下的一些线程文件读写的问题

在Windows上,FileMapping对象应必须在所有相关进程都关闭后,才能释放。
启用多线程处理时,子进程将创建FileMapping,然后主进程将打开它。 之后当子进程将尝试释放它的时候,因为父进程还在引用,所以它的引用计数不为零,无法释放。 但是当前代码没有提供在可能的情况下再次关闭它的机会。这个版本官方说num_workers=1是可以用的,更多的线程还在解决,不过现在即便是用2个子进程也已经可以了。

解决方法有二(各自均亲测有效)

  1. num_workers=0,也就是单线程操作
  2. 在使用DataLoader读取之前加上  if name == '__main__' :  就可以了。

报错信息如下:


                
  • 8
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值