如何确定Python multiprocessing运行时哪些对象会被pickle序列化
正如相关技术讨论所述,部分场景下multiprocessing几乎无需通过pickle传输数据。例如Unix系统中解释器调用fork()创建进程,多进程启动前已存在的对象无需pickle即可被各进程访问。
但我想考虑超出“预期运行逻辑”的场景:比如代码存在bug,原本只读的对象被意外修改,导致该对象被pickle后传输给其他进程。
是否有方法可以确定multiprocessing运行过程中被pickle的内容,或至少确认被pickle的数据量?相关信息无需实时获取,若能得到统计数据(如被pickle的对象数量)就很有用,可帮助定位程序运行超时是否由非预期的pickle开销导致。
我需要Python环境内部的解决方案:进程追踪工具(如Linux strace)、网络嗅探、通用IPC统计这类仅能统计进程间传输字节数的方案,不足以区分对象pickle和其他类型的通信。
更新
遗憾的是,除非修改模块或解释器源代码,否则目前没有收集pickle统计数据的方法。不过@aaron对相关内容做了解释和小细节澄清,因此我已采纳该回答。
内容的提问来源于stack exchange,提问作者sj95126
相关产品推荐
相关产品推荐

