我有一个大的只读bytes
对象,我需要在几个不同的Python(3(进程中对其进行操作,每个进程都根据他们的工作"返回"(添加到结果队列(结果列表。
由于此对象非常大且只读,因此我希望避免将其复制到每个工作进程的地址空间中。我所做的研究表明,共享内存是解决这个问题的正确方法,但我找不到一个好的资源/示例来说明如何使用multiprocessing
模块做到这一点。
提前谢谢。
您可以使用multiprocessing.Array
,它类似于ctypes.Array
,但用于共享内存,当给定ctypes
类型时。
# No lock needed, as no write will be done.
array = multiprocessing.Array(ctypes.c_char, long_byte_string, lock=False)
例如:
>>> import multiprocessing
>>> import ctypes
>>> array = multiprocessing.Array(ctypes.c_char, b'x01x02xffxfe', lock=False)
>>> array[0]
b'x01'
>>> array[2:]
b'xffxfe'
>>> array[:]
b'x01x02xffxfe'
>>> b'xff' in array
True