Skip to content Skip to sidebar Skip to footer

Multiprocessing.rawarray Operation

I read that RawArray can be shared between proceses without being copied, and wanted to understand how it is possible in Python. I saw in sharedctypes.py, that a RawArray is constr

Solution 1:

[Python 3.Docs]: multiprocessing - Process-based parallelism serializes / deserializes data exchanged between processes using a proprietary protocol: [Python 3.Docs]: pickle - Python object serialization (and from here the terms: pickle / unpickle).

According to [Python 3.Docs]: pickle - object.__getstate__():

Classes can further influence how their instances are pickled; if the class defines the method __getstate__(), it is called and the returned object is pickled as the contents for the instance, instead of the contents of the instance’s dictionary. If the __getstate__() method is absent, the instance’s __dict__ is pickled as usual.

As seen in (Win variant of) Arena.__getstate__, (class chain: sharedctypes.RawArray -> heap.BufferWrapper - > heap.Heap -> heap.Arena), only the metadata (name and size) are pickled for the Arena instance, but not the buffer itself.

Conversely, in __setstate__, the buffer is constructed based on the (above) metadata.

Post a Comment for "Multiprocessing.rawarray Operation"