告诉python multiprocessing应该使用哪种pickle协议进行序列化

时间:2018-08-22 17:11:19

标签: python serialization multiprocessing pickle python-multiprocessing

如何告诉python多重处理序列化应使用哪种pickle协议?

问题是我想使用multiprocessing.Pool.apply_async在并行过程中处理大熊猫DataFrame,结果出现以下错误:

  

OverflowError:无法序列化大于4 GiB的字节对象

根据此链接https://github.com/stan-dev/pystan/issues/197,此问题可能是由于使用默认版本的pickle协议(pickle.DEFAULT_PROTOCOL = 3)进行的多重处理,而protocol = pickle.HIGHEST_PROTOCOL = 4可以避免该问题

谢谢您的帮助!

更新:

以下候选解决方案(基于the link referenced by @juanpa.arrivillaga

from multiprocessing.reduction import ForkingPickler

class ForkingPicklerHighest(ForkingPickler):
    @classmethod
    def dumps(cls, obj, protocol=None):
        return ForkingPickler.dumps(obj, protocol=pickle.HIGHEST_PROTOCOL)

multiprocessing.connection._ForkingPickler = ForkingPicklerHighest

产生以下错误:

  

struct.error:“ i”格式要求-2147483648 <=数字<= 2147483647

,因此需要更好的解决方案!

0 个答案:

没有答案