前言
感谢这篇博客:http://blog.ziyouman.cn/?id=75,总结了全部的可能。
原因
我这里的情况是第一种,真的写的时候没注意到这个问题…
我的情况的大概是这样,我定义的dataloader是Iterloader,所以在每次新的epoch前会调用dataloader.new_epoch(),问题就出在这里了,调用new_epoch函数后马上再遍历dataloader,调用dataloader.next(),简单说就基本相当于我连续执行了这两行代码:
dataloader.new_epoch()
dataloader.next()
这就是上图解决方案中的第一种情况,前一个进程没处理完又来一个进程导致了互锁。解决方案就很简单:
dataloader.new_epoch()
time.sleep(1)
dataloader.next()
加一行sleep就好了…真的感谢上面的老哥,暴力解决的办法也有,直接设置workers=0确实可以,但是真的很慢…珍惜生命,快速炼丹!!!
所以我说为啥每次在一个新的epoch前就会突然卡住,原来如此!!!