Предоставление доступа к общей памяти после того, как дочерние процессы уже запущены

Как предоставить дочерним процессам доступ к данным в разделяемой памяти, если данные доступны только после того, как дочерние процессы были порождены (с использованием multiprocessing.Process )?

Мне известно о multiprocessing.sharedctypes.RawArray , но я не могу понять, как предоставить моим дочерним процессам доступ к RawArray , который создается после того, как процессы уже запущены.

Данные генерируются родительским процессом, и объем данных заранее не известен.

Если бы не GIL , я бы использовал многопоточность, что немного упростило бы эту задачу. Использование реализации, отличной от CPython, не вариант.


Если заглянуть под капот muliprocessing.sharedctypes , похоже, что общие объекты ctype выделяются с использованием памяти mmap ed .

Итак, этот вопрос на самом деле сводится к следующему: Может ли дочерний процесс получить доступ к анонимно отображаемой памяти, если mmap () был вызван родителем после того, как дочерний процесс был порожден?

Это в некоторой степени. в русле того, что задают в этом вопросе , за исключением того, что в моем случае вызывающий mmap () является родительским процессом, а не дочерним процессом.


(Решено)

Я создал свою собственную версию RawArray , которая использует shm_open () под капотом. Результирующий совместно используемый массив ctypes может использоваться любым процессом, если идентификатор ( tag ) совпадает.

См. этот ответ для получения подробной информации и примера.

11
задан Community 23 May 2017 в 11:45
поделиться