все Python 3multiprocessingфункция
multiprocessing.RawArray()
общая память
Создаёт массив ctypes фиксированной длины в общей памяти без блокировки. Самый быстрый способ отдать процессам большой числовой буфер.
Синтаксис
arr = ctx.RawArray(typecode_or_type, size_or_initializer)
Без блокировки он подходит для схемы «каждый процесс пишет свой непересекающийся кусок» — тогда синхронизация не нужна вовсе. Поддерживает протокол буфера, поэтому numpy.frombuffer или memoryview работают с ним без копирования. Аргумента lock нет: RawArray('i', 3, lock=True) — TypeError. Срез arr[:] копирует данные в список.
Примеры
import multiprocessing as mp
def fill_half(arr, start):
for i in range(start, start + 2):
arr[i] = i * 1.5
if __name__ == '__main__':
ctx = mp.get_context('spawn')
arr = ctx.RawArray('d', 4)
ps = [ctx.Process(target=fill_half, args=(arr, s)) for s in (0, 2)]
for p in ps:
p.start()
for p in ps:
p.join()
print(arr[:]) # → [0.0, 1.5, 3.0, 4.5]
print(memoryview(arr).nbytes) # → 32 — буфер без копирования: 4 × 8 байт
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности