Sono l'autore pathos
. Non sono sicuro di cosa vuoi fare dal tuo codice qui sopra. Tuttavia, posso forse fare un po 'di luce. Ecco un po 'di codice simile:
>>> from pathos.multiprocessing import ProcessingPool
>>> class Bar:
... def foo(self, name):
... return len(str(name))
... def boo(self, things):
... for thing in things:
... self.sum += self.foo(thing)
... return self.sum
... sum = 0
...
>>> b = Bar()
>>> results = ProcessingPool().map(b.boo, [[12,3,456],[8,9,10],['a','b','cde']])
>>> results
[6, 4, 5]
>>> b.sum
0
Che cosa succede al di sopra, è che il metodo del Bar
istanza b
boo
si chiama dove b.boo
è passato ad un nuovo processo di pitone, e quindi valutati per ciascuna delle liste nidificate. Puoi vedere che i risultati sono corretti ... len ("12") + len ("3") + len ("456") è 6, e così via.
Tuttavia, è anche possibile vedere che quando si guarda b.sum
, è misteriosamente ancora 0
. Perché lo b.sum
è ancora zero? Bene, ciò che fa multiprocessing
(e quindi anche pathos.multiprocessing
), è una COPIA di qualunque cosa si passi attraverso la mappa verso l'altro processo python ... e quindi l'istanza copiata viene quindi chiamata (in parallelo) e restituisce qualunque risultato vengono chiamati da il metodo invocato. Nota che devi ottenere i risultati RETURN oppure stamparli o registrarli o inviarli a un file o in altro modo. Non possono tornare all'istanza originale come ci si potrebbe aspettare, perché non è l'istanza originale che viene inviata agli altri processori. Le copie dell'istanza vengono create, quindi eliminate - a ciascuna di esse è stato aumentato l'attributo sum
, ma l'originale `b.sum 'non è stato modificato.
V'è tuttavia, prevede entro pathos
per fare qualcosa di simile al lavoro di cui sopra, come ci si potrebbe aspettare - in cui l'oggetto originale IS aggiornato, ma non funziona così ancora.
EDIT: Se si installa con pip
, notare che l'ultima versione rilasciata di pathos
è di diversi anni, e non può installare correttamente, o non può installare tutti i moduli. È in sospeso una nuova versione pathos
, ma fino ad allora è meglio ottenere l'ultima versione del codice da github e installare da lì. Il tronco è per lo più stabile in fase di sviluppo. Penso che il tuo problema potrebbe essere stato che non tutti i pacchetti sono stati installati, a causa di una "nuova" incompatibilità pathos
"vecchia" pathos
nell'installazione. Se manca pathos.multiprocessing
, questo è il colpevole più probabile.
Get pathos
da github qui: https://github.com/uqfoundation/pathos
Ho lo stesso problema, come OP qui. Posso fare "import pathos", ma "import pathos.multiprocessing" mi dà un errore non trovato nel modulo. Quale potrebbe essere la ragione per questo? – sashkello
Il problema è che non capisco la domanda dell'OP ... a causa di qualche barriera nell'inglese e anche dei campioni di codice minimo. Forse posso provare un altro approccio. Forse tutte le dipendenze non sono state installate. Puoi importare elaborazione? Che ne dite di 'from processing.pool import Pool'? Che ne dite di 'from pathos.helpers import mp_helper' o' from pathos.helpers import ProcessPool'? Che dire di 'import pp' e' from pathos.helpers import pp_helper'? –
'from pathos.helpers import *' fornisce "Nessun modulo denominato helper". In qualche modo non tutto il pathos è disponibile per me e sembra OP. L'ho installato da pip, è l'ultima versione. – sashkello