multitraitement en python de partage d'objets volumineux (par exemple, les pandas dataframe) entre plusieurs processus

Je suis à l'aide de Python multitraitement, plus précisément

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()

Cette approche a une énorme consommation de mémoire; manger à peu près tous mes RAM (à quel point il devient extrêmement lent, ce qui rend le multitraitement assez inutile). Je suppose que le problème est que df est un énorme objet (un grand pandas dataframe) et il est copié pour chaque processus. J'ai essayé d'utiliser multiprocessing.Value de partager le dataframe sans copier

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

(comme suggéré dans Python multiprocesseur à mémoire partagée), mais qui me donne TypeError: this type has no size (le même que Le partage d'un objet complexe entre Python processus?, à laquelle malheureusement je ne comprends pas la réponse).

Je suis en utilisant le multitraitement pour la première fois et peut-être que ma compréhension n'est pas (encore) assez bon. Est multiprocessing.Value en fait même la bonne chose à utiliser dans ce cas? J'ai vu d'autres suggestions (par exemple, la file d'attente), mais je suis un peu confus. Quelles options sont là pour partager de la mémoire, et qu'on serait mieux dans ce cas?

  • voir plus récentes question: stackoverflow.com/questions/22468279/....
  • Est-il un récent façon de le faire, ou est l'aide de Namespace la meilleure approche? Comment avez-vous atterri résoudre @Anne
InformationsquelleAutor Anne | 2014-03-18