Как запустить forkserver после создания многопроцессорной обработки. Массив в python 3.6 в linux - PullRequest
2 голосов
/ 15 марта 2019

У меня есть гигантский массив с плавающей точкой (около 40 ГБ), которым я хотел бы поделиться с 20 параллельными загрузчиками, чтобы они могли разместить свои данные. Основной родительский процесс будет получать данные из этого массива.

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

Я думал, что было бы полезно, если бы я мог создать общий многопроцессорный массив и запустить forkserver перед созданием объектов, специфичных для основного родительского процесса. Затем, когда я использую multiprocessing.Process, он будет работать с forkserver, который имеет общий массив, но ничего больше не создается впоследствии.

Однако я не могу получить эту работу. Если я сделаю multiprocessing.set_start_method ("forkserver"), созданный впоследствии массив будет недоступен для forkserver. Я попытался сначала создать массив, а затем установить метод запуска, но это вызывает ошибку для метода запуска, который уже был установлен при создании массива. Я также попытался создать общий массив с помощью multiprocessing.get_context ("forkserver"). Array (), но затем у вилочного сервера нет переменной, связанной с этим массивом внутри, поэтому я не могу получить доступ к общему массиву в multiprocessing.Process.

Есть ли способ заставить его работать? Имеет ли смысл мой подход? Как наиболее эффективный способ для процессов Python совместно использовать большой массив, но не более того?

...