Python Glossary English

все Python 3multiprocessingфункция

multiprocessing.Array()

общая память

Создаёт массив ctypes фиксированной длины в общей памяти с блокировкой по умолчанию. Индексируется и режется срезами, как список.

Синтаксис

arr = ctx.Array(typecode_or_type, size_or_initializer, *, lock=True)

Длина задаётся раз и навсегда: append нет, выход за границы — IndexError. Второй аргумент — либо размер (заполнится нулями), либо последовательность начальных значений. Срез arr[:] возвращает обычный список-копию, а не вид на общую память. Как и у Value, встроенная блокировка не делает arr[i] += 1 атомарным — оборачивайте в with arr.get_lock(). Для байтовой строки берут код 'c' и атрибут .value.

Примеры

import multiprocessing as mp
def fill(arr):
    for i in range(len(arr)):
        arr[i] = i * i
if __name__ == '__main__':
    ctx = mp.get_context('spawn')
    arr = ctx.Array('i', 4)
    p = ctx.Process(target=fill, args=(arr,))
    p.start()
    p.join()
    print(arr[:])  # → [0, 1, 4, 9]
import multiprocessing as mp
if __name__ == '__main__':
    ctx = mp.get_context('spawn')
    arr = ctx.Array('i', [1, 2, 3])
    print(len(arr), arr[-1])  # → 3 3
    name = ctx.Array('c', b'abc')
    print(name.value)  # → b'abc'
    try:
        arr[3] = 4
    except IndexError as e:
        print(e)  # → invalid index

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности