Sto incontrando un bizzarro problema che non riesco a spiegare. Spero che qualcuno là fuori possa aiutare per favore!Importazione del supporto per il multiprocessing in Scipy break in Python
Io corro Python 2.7.3 e SciPy v0.14.0 e sto cercando di attuare alcune molto semplici algoritmi multiprocessore a velocità fino mio codice utilizzando il modulo multiprocessing
. Sono riuscito a far funzionare un esempio di base:
import multiprocessing
import numpy as np
import time
# import scipy.special
def compute_something(t):
a = 0.
for i in range(100000):
a = np.sqrt(t)
return a
if __name__ == '__main__':
pool_size = multiprocessing.cpu_count()
print "Pool size:", pool_size
pool = multiprocessing.Pool(processes=pool_size)
inputs = range(10)
tic = time.time()
builtin_outputs = map(compute_something, inputs)
print 'Built-in:', time.time() - tic
tic = time.time()
pool_outputs = pool.map(compute_something, inputs)
print 'Pool :', time.time() - tic
Questo funziona benissimo, tornando
Pool size: 8
Built-in: 1.56904006004
Pool : 0.447728157043
Ma se togliere il commento alla linea di import scipy.special
, ottengo:
Pool size: 8
Built-in: 1.58968091011
Pool : 1.59387993813
ed io posso vedere che solo un core sta facendo il lavoro sul mio sistema. In effetti, l'importazione di qualsiasi modulo dal pacchetto scipy sembra avere questo effetto (ne ho provati diversi).
Qualche idea? Non ho mai visto un caso come questo prima, dove un'importazione apparentemente innocua può avere un effetto così strano e inaspettato.
Grazie!
aggiornamento (1)
Spostando la linea di importazione SciPy alla funzione compute_something
migliora parzialmente il problema:
Pool size: 8
Built-in: 1.66807389259
Pool : 0.596321105957
Update (2)
Grazie a @larsmans per test su un sistema diverso. Il problema non è stato confermato usando Scipy v.0.12.0. Spostando questa query nella mailing list di scipy e posterai qualsiasi risposta.
Impossibile riprodurre con Python 2.7.5, SciPy 0.12.0. Che versione stai usando? –
Interessante, grazie per aver provato! Sto usando 0.14.0b1. Ho bisogno di alcuni dei moduli più recenti, quindi utilizzando una versione più recente. – Gabriel
Suggerisco anche di provare la versione stabile - e se questo risolve il problema, prova a contattare la mailing list di SciPy. Il debug di una versione beta di una libreria non è davvero roba del genere. –