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