python多进程报错 pickle

在尝试使用multiprocessing.Queue进行多进程通信时,由于放入Queue的类实例包含了不可序列化的对象(如文件、日志、远程连接),导致出现AttributeError: Can't pickle local object 'Worker.init.<locals>.<lambda>'。pickle模块在多进程间传递对象时需要将对象序列化,而某些对象无法被pickle。因此,作者改用多线程来规避此问题。博客中提到了一些参考资料,包括对multiprocessing库的详细解释、多线程与多进程的对比以及进程池的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用multiprocessing.Queue实现多进程,Queue中put的是自己定义的类实例,put后报错如下:

AttributeError: Can‘t pickle local object ‘Worker.init.<locals>.<lambda>

类实例中涉及到文件,日志,远程连接等操作,这些好像是不能被pickle的(我理解比较浅,有大佬知道懂的可以评论区告诉我)

解决不了,后来改成多线程处理了

记录一下参考过的资料

1、 https://github.com/DeepVoltaire/AutoAugment/issues/16
这个issue 关注这个评论,我没试,可以参考
在这里插入图片描述

2、一文搞明白Python多进程编程:multiprocessing库
https://blog.youkuaiyun.com/weixin_44604541/article/details/117229684

3、python中multiprocessing、multiprocessing.dummy和threading用法笔记
https://blog.youkuaiyun.com/u012969412/article/details/82768882

4、【Python】Python进程池multiprocessing.Pool八个函数对比:apply、apply_async、map、map_async、imap、starmap…
https://blog.youkuaiyun.com/BobYuan888/article/details/109266020

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值