Python Glossary English

все 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Сообщить о неточности