2015-04-30 13 views
6

Utilizzando Python 2.7,Come cambio il serializzatore che la mia sottoclasse multiprocessing.mangers.BaseManager utilizza in cPickle?

sto passando molti oggetti di grandi dimensioni attraverso i processi che utilizzano un manager derivato da multiprocessing.managers. BaseManager e vorrei usare cPickle come serializzatore per risparmiare tempo; Come si può fare? Vedo che l'inizializzatore di BaseManager accetta un argomento serializer, ma le uniche opzioni sembrano essere pickle e xmlrpclib.

risposta

2

Sembra che tu non possa fare rigorosamente quello che chiedi.

Infatti, c'è un fork di multiprocessing, pathos, scritto dai creatori di un'alternativa a pickle, dill - anche a causa della limitata capacità di controllare il serializzatore.

Personalmente suggerirei di utilizzare ipython.parallel, poiché sembra essere mantenuto più attivamente.

Vedere ulteriori dettagli su questa questione in questo pezzo Parallelism and Serialization.

1

Sono l'autore di aneto e pathos. La multiprocessing dovrebbe usare cPickle di default, quindi non dovresti fare nulla.

Se il tuo oggetto non esegue il searliize, hai due opzioni: vai a un fork di multiprocessing o qualche altro backend parallelo, o aggiungi metodi alla tua classe (cioè metodi di riduzione) che registrano come serializzare l'oggetto.