[Python] threads

Manlio Perillo manlio.perillo a gmail.com
Mar 1 Dic 2009 11:35:00 CET


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Ernesto ha scritto:
> Ciao a tutti,
> 
> premetto che non ho alcuna esperienza con i threads. Ciò nonostante,  
> vorrei iniziare a capire come poterli utilizzare per sfruttare le  
> architetture multicore delle moderne cpu e, quindi, migliorare le  
> prestazione di uno script su cui sto lavorando. 

Purtroppo in Python l'utilizzo dei thread è pesantemente limitato
dall'uso di un lock globale (GIL); solo un thread alla volta può
eseguire codice Python.

> In particolare, lo  
> script in questione effettua un parsing di un input file e subito dopo  
> genera una serie di file di dimensioni più piccole. Di seguito, un  
> loop è utilizzato per effettuare alcune operazioni su tutti i file  
> creati. Tali operazioni sono le medesime per ogni file. Mi chiedevo  
> se, utilizzando i threads, fossi in grado di ridurre i tempi di  
> esecuzione del loop, magari indirizzando parte dei file generati a  
> threads indipendenti. 

Temo che non avrai nessun incremento di prestazioni usando i thread.
L'unico vantaggio nell'usare i thread si ha quando si chiamano funzioni
scritte in C che rilasciano il GIL (come ad esempio la read su un socket).


Ti consiglio quindi di usare i processi ed il modulo multiprocessing:
http://docs.python.org/library/multiprocessing.html

Per le versioni di Python inferiori alla 2.6 lo trovi come package esterno.


Il package multiprocessing ti offre una implementazione di un Pool:
http://docs.python.org/library/multiprocessing.html#module-multiprocessing.pool
che dovrebbe essere tutto quello di cui hai bisogno; in particolare il
metodo map.

> [...]


Ciao  Manlio
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iEYEARECAAYFAksU8VQACgkQscQJ24LbaUQ0aACcCeIclPNjc3DWdSynUtW+GiAz
SlsAoJlWD0m3jVvPyx9OwYUXCCGkRpGd
=DLqi
-----END PGP SIGNATURE-----


Maggiori informazioni sulla lista Python