问题背景:
在windows 复现代码的时候发现
ForkingPickler(file, protocol).dump(obj) AttributeError: Can't pickle local object 'RamSDataset.__init__.<locals>.<lambda>'
问题描述及问题成因:
很明显是由于 在Dataloader 里设置的 num_worker 不是0,但是我印象中之前在windows 下写代码的时候 也没碰见过这种问题
解决过程:
在查找时 发现 https://blog.csdn.net/ONE_SIX_MIX/article/details/130388252
不经意间指出问题:(引用)
其实是pickle 库只能储存一些简单类型。如果 dataset 中使用 lambda 函数对象,将会导致出现这样的错误 AttributeError: Can’t pickle local object
解决方案:
将 dataset 里使用的 lambda 方法 改写
结论及重点:
观察 报错
Can't pickle local object 'RamSDataset.__init__.<locals>.<lambda>
其实已经说了 lambda 的问题只是没意识到时它导致了 pickle的问题,进而影响 dataloader 的 num_worker 控制的 multiprocessing