#python #numpy #fork #shared-memory #large-data
#python #numpy #разветвление #разделяемая память #большие данные
Вопрос:
У меня есть основной процесс Python и группа рабочих элементов, созданных основным процессом с использованием os.fork()
.
Мне нужно передать большие и довольно сложные структуры данных из рабочих обратно в основной процесс. Какие существующие библиотеки вы бы порекомендовали для этого?
Структуры данных представляют собой смесь списков, словарей, numpy
массивов, пользовательских классов (которые я могу настроить) и многослойных комбинаций вышеперечисленного.
Следует избегать дискового ввода-вывода. Если бы я мог также избежать создания копий данных — например, используя какое-либо решение с общей памятью — это тоже было бы неплохо, но не является жестким ограничением.
Для целей этого вопроса обязательно, чтобы рабочие были созданы с использованием os.fork()
или их оболочки, которая клонировала бы адресное пространство главного процесса.
Это должно работать только в Linux.
Комментарии:
1. «Следует избегать дискового ввода-вывода». Я предполагаю, что это не включает подкачку в ситуациях, когда объем данных в памяти становится достаточно большим, чтобы потребовалась подкачка.
2. @JAB: Ваше предположение верно. Однако конечное решение должно разумно использовать память.
Ответ №1:
multiprocessing
реализация очереди работает. Внутренне он отправляет данные в канал.
q = multiprocessing.Queue()
if (os.fork() == 0):
print(q.get())
else:
q.put(5)
# outputs: 5