Использование верхней памяти только, когда многопроцессорная обработка

Я пытаюсь пользоваться многопроцессорной библиотекой Python для обнадеживающего получения некоторой производительности. Конкретно я использую его функцию карты. Теперь, по некоторым причинам когда я выгружаю его с его единственным обработанным дубликатом, я не получаю использование верхней памяти. Но использование многопроцессорной версии карты заставляет мою память проходить крышу. Для записи я делаю что-то, что может легко пожиратель ресурсов загрузки памяти, но чем различие было бы между двумя для порождения такого абсолютного различия?

5
задан johndodo 27 August 2012 в 11:46
поделиться

1 ответ

Вы понимаете, что многопроцессорность не использует потоки, да? Я говорю это, потому что вы упомянули «однопоточный аналог».

Вы отправляете много данных через multiprocessing карту ? Вероятной причиной является то, что во многих случаях приходится выполнять сериализацию многопроцессорности. многопроцессорность использует pickle , который обычно занимает больше памяти, чем данные, которые он обрабатывает. (В некоторых случаях, особенно в системах с fork () , где новые процессы создаются при вызове метода map , он может избежать сериализации, но всякий раз, когда ему нужно отправить новые данные к существующему процессу он не может этого сделать.)

Поскольку с многопроцессорностью вся фактическая работа выполняется в отдельных процессах, память вашего основного процесса не должна зависеть от фактических операций, которые вы выполняете. Однако общее использование памяти увеличивается незначительно, потому что каждый рабочий процесс имеет копию данных, которые вы отправляете. Иногда это память копирования при записи (в тех же случаях, когда не сериализация) в системах с CoW, но использование памяти Python таково, что она быстро записывается и, таким образом, копируется.

4
ответ дан 15 December 2019 в 00:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: