[Python] GIL e fork - multiprocesso -

Manlio Perillo manlio_perillo a libero.it
Mer 12 Maggio 2010 23:26:41 CEST


Alessandro Agosto ha scritto:
> 
> 
> Il giorno 11 maggio 2010 19.16, Manlio Perillo <manlio_perillo a libero.it
> <mailto:manlio_perillo a libero.it>> ha scritto:
> 
>     Ciao
> 
> Ciao Manlio!
> 
>     La traduzione non è corretta.
>     Meglio "limitato dalla CPU", o qualcosa di simile.
> 
>  
>  Ti ringrazio, ci speravo che intervenissi per proporre una traduzione
> appropriata :)
> 
>     Il codice che hai postato usa il threading nel modo sbagliato, perchè le
>     due funzioni sono chiamate in modo sequenziale.
> 

Scusa per aver aumentato la tua confusione, ma qui ho scritto una
sciocchezza.

I due thread *non* vengono eseguiti in modo sequenziale, ma in parallelo.

> [...]
> 
>     Prima aspetti che il primo thread finisce, e quindi esegui il secondo.
> 
> Uhm, adesso comunque mi hai chiarito proprio le idee, 

Purtroppo temo di averti ulteriormente confuso ;-).

> ho provato a
> togliere i join, a preparare i due threads insieme e quindi eseguirli
> contemporaneamente ma senza la join, per terminare il programma su Mac
> devo premere un tasto, altrimenti non mi restituisce il terminale, ma
> niente di chè, solo benchmarking. 

Senza join il thread principale termina prima dei due threads addizionali.
Come viene gestito dipende probabilmente dal OS, ma io l'ho solo testato
su Linux.

> [...]
>
> Trovo grandiose le prestazioni dei processi, alla faccia di chi li
> critica in favore dei thread (almeno con python). 

Il problema è appunto il GIL.
Inoltre il tuo è un bench abbastanza particolare.

Comunque si, di solito è meglio usare i processi, puoi usare anche il
package multiprocessing.

Ma il multithreading in alcuni casi fa bene il suo lavoro, purchè usati
con consapevolezza.
I processi non sono banali da utilizzare, e di solito conviene affidarsi
a qualcosa come multiprocessing, twisted o Qt.


> [...] 

> Ciao, grazie per il bench. Come saprai il tuo interesse è sempre ben
> gradito :)
> 

Di nulla


Manlio


Maggiori informazioni sulla lista Python