Как предоставить дочерним процессам доступ к данным в общей памяти, если данные доступны только после того, как дочерние процессы были созданы (используя multiprocessing.Process)?
Я знаю multiprocessing.sharedctypes.RawArray, но я не могу понять, как предоставить дочерним процессам доступ к RawArray
который создается после того, как процессы уже запущены.
Данные генерируются родительским процессом, и количество данных заранее неизвестно.
Если не для GIL, вместо этого я буду использовать threading, что сделает эту задачу немного проще. Использование реализации, отличной от CPython, не является вариантом.
Глядя под капот muliprocessing.sharedctypes, похоже, что выделены общие объекты ctype с использованием mmap
ed memory.
Итак, этот вопрос действительно сводится к следующему: Может ли дочерний процесс получить доступ к анонимно отображаемой памяти, если родительский элемент после вызова дочернего процесса был вызван mmap()
?
Это несколько в духе того, что задается в этом вопросе, за исключением того, что в моем случае вызывающим абонентом mmap()
является родительский процесс, а не дочерний процесс.
(Раскрыты)
Я создал свою собственную версию RawArray
, которая использует shm_open()
под капотом. Получаемый общий массив ctypes может использоваться совместно с любым процессом до тех пор, пока совпадает идентификатор (tag
).
Подробнее см. этот ответ.