Pregunta

¿La presencia de pitón GIL implica que en múltiples pitón roscado el mismo operación no es tan diferente de repetirlo en un solo hilo?.

Por ejemplo, si tengo que subir dos archivos, ¿cuál es la ventaja de hacerlo en dos hilos en lugar de ellos la posibilidad de subir uno tras otro ?.

He intentado una gran operación matemática en ambos sentidos. Pero parecen tener casi el mismo tiempo en completarse.

Esto parece ser claro para mí. ¿Alguien me puede ayudar en esto?. Gracias.

¿Fue útil?

Solución

hilos de Python consiguen un rap ligeramente peor de lo que merecen. Hay tres (bueno, 2.5) los casos en que realmente le consiguen beneficios:

  • Si el código no Python (por ejemplo, una biblioteca de C, el núcleo, etc.) se está ejecutando, otros hilos Python pueden continuar la ejecución. No es más que puro código Python que no se puede ejecutar en dos hilos a la vez. Así que si usted está haciendo un disco o red de E / S, las discusiones de hecho se puede comprar algo, ya que la mayoría de las veces se gasta fuera de sí mismo Python.

  • El GIL no es en realidad parte de Python , que es un detalle de implementación de CPython (la implementación de "referencia" que los desarrolladores del núcleo de Python trabajar, y que por lo general se obtiene si se acaba de ejecutar "pitón" en su máquina Linux o algo así.

    Jython, IronPython, y cualquier otro reimplementaciones de Python en general, hacer no tener una GIL, y múltiples hilos pura-Python puede ejecutar simultáneamente.

  • El caso 0.5: Incluso si usted es enteramente pura-Python y ve poco o ningún beneficio en el rendimiento del roscado, algunos problemas son muy conveniente en términos de tiempo de desarrollo y la dificultad de resolver con hilos. Esto depende en parte de los desarrolladores, también, por supuesto.

Otros consejos

En realidad depende de la biblioteca que está utilizando. El GIL está destinado a evitar que los objetos Python y sus estructuras de datos internos para ser cambiados al mismo tiempo. Si estás haciendo un proceso de carga, la biblioteca que se utiliza para hacer la carga real podría liberar el GIL mientras se está a la espera de la petición HTTP real para completar (yo supongo que es el caso de los módulos HTTP en la biblioteca estándar, pero no el registro).

Como nota al margen, si realmente quiere tener las cosas funcionando en paralelo, sólo utilizar múltiples procesos . Esto le ahorrará un montón de problemas y que va a terminar con un mejor código (más robusto, más escalable, y muy probablemente mejor estructurado).

Depende del módulo de código nativo que está ejecutando. Los módulos nativos pueden liberar el GIL y luego salir y hacer su propia cosa que permite que otro hilo para bloquear el GIL. El GIL se lleva a cabo normalmente mientras que el código, tanto pitón y nativo, están operando en objetos de Python. Si quieres más detalles que probablemente tendrá que ir a leer un poco acerca de ella. :)

Ver: ¿Qué es un bloqueo global intérprete (GIL)? y Estado de rosca y el Mundial de Intérpretes de bloqueo

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