Pregunta

Un confiable coder amigo me dijo que Python actual de multi-threading aplicación es en serio buggy - lo suficiente como para evitar el uso por completo.¿Qué puede decir acerca de este rumor?

¿Fue útil?

Solución

Python hilos son buenas para simultáneos de e/S programación.Los hilos se permutan de salida de la CPU tan pronto como bloque de espera para la entrada de archivos, red, etc.Esto permite que otros Python hilos para uso de la CPU mientras que otros esperan.Esto le permitiría escribir un multi-threaded servidor web o web crawler, por ejemplo.

Sin embargo, Python hilos están en serie, la GIL cuando entran a la intérprete de núcleo.Esto significa que si dos hilos están haciendo crujir los números, sólo uno puede ejecutar en cualquier momento dado.También significa que usted no puede tomar ventaja de la multi-núcleo o multi-arquitecturas de procesador.

Hay soluciones como la ejecución de múltiples intérpretes de Python simultáneamente, el uso de un C basado en hilos de la biblioteca.Esto no es para los débiles de corazón y los beneficios podrían no ser vale la pena.Esperemos que para una solución Python en una versión futura.

Otros consejos

La implementación estándar de Python (generalmente conocido como CPython, como está escrito en C) usos OS hilos, pero como no es el Bloqueo Global De Intérprete, sólo un subproceso a la vez que se permite la ejecución de código Python.Pero dentro de esas limitaciones, el roscado de las bibliotecas son robusto y ampliamente utilizado.

Si usted quiere ser capaz de utilizar varios núcleos de la CPU, hay un par de opciones.Uno es el uso de múltiples intérpretes de python simultáneamente, como se ha mencionado por otros.Otra opción es utilizar una aplicación diferente de Python que no utilice un GIL.Las dos opciones principales son Jython y IronPython.

Jython está escrito en Java, y ahora está bastante maduro, aunque algunas incompatibilidades permanecen.Por ejemplo, el framework web Django no se ejecuta perfectamente sin embargo,, pero es cada vez más cerca todo el tiempo.Jython es ideal para la seguridad de los subprocesos, sale mejor en los benchmarks y tiene un descarado mensaje para los que quieren el GIL.

IronPython utiliza el .NET framework y que está escrito en C#.La compatibilidad es de llegar a la etapa donde Django se puede ejecutar en IronPython (al menos como una demo) y hay guías para el uso de hilos en IronPython.

El GIL (Bloqueo Global de Intérprete) podría ser un problema, pero la API es bastante aceptable.Pruebe la excelente processing el módulo, que implementa el Roscado API para procesos separados.Yo estoy usando ahora (aunque en OS X, todavía tienen que hacer algunas pruebas en Windows) y estoy realmente impresionado.La Cola de la clase es realmente el ahorro de mi tocino en términos de la gestión de la complejidad!

EDITAR:parece que el módulo de procesamiento está incluido en la biblioteca estándar a partir de la versión 2.6 (import multiprocessing).La alegría!

Que yo sepa no hay errores, pero el rendimiento durante las operaciones de roscado en cPython es realmente malo (en comparación con la mayoría de roscado de implementaciones, pero por lo general lo suficientemente bueno si la mayoría de todos los hilos de hacer es bloquear) debido a la GIL (Bloqueo Global de Intérprete), por lo que realmente es la aplicación específica en lugar de lenguaje específico.Jython, por ejemplo, no sufren de esta debido a la utilización del thread de Java modelo.

Ver este post sobre por qué no es realmente posible eliminar el GIL de la cPython aplicación, y este para algunas prácticas de elaboración y soluciones.

Hacer una rápida en google para "Python GIL" para obtener más información.

Si desea código en python y obtener un gran roscado de apoyo, usted puede ser que desee comprobar hacia fuera IronPython o Jython.Desde el código de python en IronPython y Jython ejecutar en el .NET CLR y Java VM, respectivamente, disfrutar de la gran roscado soporte integrada en las bibliotecas.Además, IronPython no tiene el GIL, un problema que impide que CPython hilos de tomar la ventaja completa de la multi-core arquitecturas.

Lo he utilizado en varias aplicaciones y nunca han tenido ni oído hablar de roscado ser otra cosa que el 100% fiables, siempre y cuando usted sabe sus límites.Usted no puede desovar 1000 hilos al mismo tiempo y esperar que el programa se ejecute correctamente en Windows, sin embargo, usted puede escribir fácilmente un trabajador de la piscina y sólo pienso 1000 operaciones, y mantener todo lo bueno y bajo control.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top