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