2008-12-28 25 views
6

¿Tutorial general o un buen recurso sobre cómo usar hilos en Python?Hilos en Python

Cuándo utilizar subprocesos, cómo son efectivos y algunos antecedentes generales sobre subprocesos [específicos de Python]?

Respuesta

13

Los subprocesos se deben usar cuando desee que dos cosas se ejecuten a la vez, o si quiere que algo se ejecute en segundo plano sin ralentizar el proceso principal.
Mi recomendación es que solo use hilos si es necesario. Generalmente agregan complejidad a un programa.
La documentación principal para el roscado está aquí: http://docs.python.org/library/threading.html
Algunos ejemplos son aquí:
http://www.devshed.com/c/a/Python/Basic-Threading-in-Python/1/
http://linuxgazette.net/107/pai.html
http://www.wellho.net/solutions/python-python-threads-a-first-example.html

1

Hay varios tutoriales here.

3

Hay un pdf fantástico, Tutorial on Threads Programming with Python por Norman Matloff y Francis Hsu, de la Universidad de California, Davis.

Se deben evitar los hilos siempre que sea posible. Agregan mucha complejidad, problemas de sincronización y problemas difíciles de depurar. Sin embargo, algunos problemas los requieren (es decir, la programación de la GUI), pero le recomiendo que busque una solución de subproceso único si puede.

+3

Lo sentimos, los hilos no deben "evitarse siempre que sea posible", tampoco son "necesarios" para la programación de la GUI. –

+0

Bueno, tal vez es correcto, pero ¿puedes proporcionar mejores razones/ejemplos? –

+0

¡Gracias por el enlace! –

8

Una cosa para recordar antes de dedicar tiempo y esfuerzo al escribir una aplicación de Python multiproceso es que hay un Global Interpreter Lock (GIL), por lo que en realidad no ejecutará más de un hilo a la vez.

Esto hace que el enhebrado sea inadecuado para tratar de aprovechar múltiples núcleos o CPU. Puede obtener algo de aceleración multiplexando otros recursos (red, disco, ...), pero nunca ha sido particularmente notable en mi experiencia.

En general, solo uso subprocesos cuando hay varias tareas lógicamente separadas que ocurren al mismo tiempo, y aún así las quiero todas en la misma máquina virtual. Un hilo que extrae datos de la web y los coloca en una cola, mientras que otro hilo emerge de la cola y escribe en una base de datos, algo así.

Con Python 2.6, existe el nuevo módulo multiprocessing que es muy bueno - tiene una interfaz muy similar al módulo threading, pero en realidad genera nuevos procesos de sistema operativo, esquivando el GIL.