On Thu, 17 Nov 2011 17:19:12 +0100, Matteo Perini <perini.mat...@gmail.com> wrote: > Ciao lista, > Vorrei sapere se è possibile utilizzare tutti i core della cpu per > eseguire calcoli gravosi. > Ho guardato un po' in internet e come risposta ho trovato il > multithreading che ho già utilizzato un paio di volte. > Però non riesco a capire se è possibile applicarlo anche ad un unico > comando.
Non credo nel tuo caso. Il codice python in linea di massima non può essere eseguito in multithread, nel senso che l'interprete può esegure un solo opcode alla volta. Ma se questo opcode "è lungo di suo", per esempio legge da un file, o dalla rete, o fa qualcosa di complesso ma restando in C, senza toccare pezzi di python, allora può "rilasciare il GIL" e permettere ad altri thread di correre in parallelo. Di conseguenza, un programma python può beneficiare di multithread solo quando è IO-bound, non quando è CPU-bound, e il tempo di CPU è speso in codice Python. Nota che - se ricordo bene - numpy rilascia il GIL per le operazioni implementate in C, ovvero, se fai A + B dove A e B sono matrici 10000 x 10000, mentre le somma può permettere ad altro codice (python o meno) di correre. Ma la funzione leastsq, anche se è scritta in C, valuta continuamente la fp che, essendo scritta in Python, ha bisogno di aspettare il GIL per essere eseguita. Al di là della prestazione di Python coi thread, non credo che la leastsq sia parallelizzabile: se non dico cappellate, l'algoritmo consiste in valutare continuamente la funzione in un numero di punti e ogni valutazione ha bisogno dei risultati precedenti, quindi non mi sembra un problema adatto ad essere parallelizzato. -- Daniele Varrazzo - Develer S.r.l. http://www.develer.com _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python