многопроцессорность в Python - совместное использование большого объекта (например, pandas dataframe) между несколькими процессами

Я использую многопроцессорность Python, точнее

from multiprocessing import Pool
p = Pool(15)

args = [(df, config1), (df, config2), ...] #list of args - df is the same object in each tuple
res = p.map_async(func, args) #func is some arbitrary function
p.close()
p.join()

Этот подход имеет огромное потребление памяти; израсходовал почти всю мою оперативную память (в этот момент она становится очень медленной, что делает многопроцессорную работу довольно бесполезной). Я полагаю, проблема в том, чтоdf это огромный объект (большой информационный фрейм pandas), и он копируется для каждого процесса. Я пытался использоватьmultiprocessing.Value поделиться кадром данных без копирования

shared_df = multiprocessing.Value(pandas.DataFrame, df)
args = [(shared_df, config1), (shared_df, config2), ...] 

(как предложено вМногопроцессорная разделяемая память Python), но это дает мнеTypeError: this type has no size (такой же какСовместное использование сложного объекта между процессами Python?Ответ на который я, к сожалению, не понимаю).

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

Ответы на вопрос(1)

Ваш ответ на вопрос