[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