我读到RawArray可以在进程之间共享而无需复制,并且想了解它在 Python 中是如何实现的。
我在sharedctypes.py中看到, a是从heap.pyRawArray中的a 构造的,然后用 取消。BufferWrapperctypes.memset
BufferWrapper由一个对象组成Arena,该对象本身是由一个mmap(或 Windows 中的 100 个 mmap,请参见heap.py中的第 40 行)构建的
我读到mmap系统调用实际上是在Linux/BSD中用于分配内存的,而Python模块在windows中使用MapViewOfFile 。
mmap那么看起来很方便。它似乎可以直接与mp.pool-
from struct import pack
from mmap import mmap
def pack_into_mmap(idx_nums_tup):
idx, ints_to_pack = idx_nums_tup
pack_into(str(len(ints_to_pack)) + 'i', shared_mmap, idx*4*total//2 , *ints_to_pack)
if __name__ == '__main__':
total = 5 * 10**7
shared_mmap = mmap(-1, total * 4)
ints_to_pack = range(total)
pool = …Run Code Online (Sandbox Code Playgroud)