Pregunta

escribí una escritura hermosa multiproceso, y cuando me encontré con él, se comportó peor con 25 hilos que con la invocación simplemente directa del manipulador hilo.

Entonces descubrió el cierre global del intérprete. Quiero preguntar, antes de que yo descarto pitón para este script y volver a escribir la cosa en otra cosa, ¿hay alguna manera de hacerlo real de trabajo multi-hilo en Python?

¿Fue útil?

Solución

El otro enfoque es abandonar hilos y en lugar de utilizar el Multiprocessing módulo (Python 2.6 +), que obtiene alrededor del GIL, y tiene una API que por lo menos similar a la del módulo threading.

Otros consejos

Ahora bien, esta es una pregunta interesante -. No creo que hay un escape del GIL en CPython recta

Stackless Python se supone que han mejorado el rendimiento "concurrencia" sobre CPython con su uso de microhilos , pero yo creo que dont't escapa del GIL.

Además, según la página de GIL en python.org , Jython y IronPython no lo hacen tener una GIL.

La respuesta correcta depende en gran medida de lo que está haciendo.

Fuertemente vinculado a la CPU (y bloqueando con destino a IO) tareas, como la compresión y la representación de la imagen, se hace generalmente con código nativo, y bibliotecas nativas normalmente liberar el GIL mientras trabajan, lo que permite la concurrencia. Cuando se puede aislar el trabajo intensivo de la CPU a una llamada nativa estrecha, se obtiene concurrencia, rendimiento nativo en los momentos importantes, y la conveniencia de escribir la mayor parte del código en Python.

No todo el código ha esos pequeños bloques, aislables de código computacional que se pueden implementar de forma ordenada en una biblioteca nativa, pero mucho hacer.

En CPython (la implementación de Python en C), no, de acuerdo a mi conocimiento. (Si estoy equivocado, por favor me corrija, me Seguro gustaría saber si existe una solución!).

Es posible que desee estar interesado en IronPython (NET) o JPython (Java / JWM). No los he utilizado, pero creo que al menos uno de ellos es compatible con subprocesos nativos al entorno de ejecución determinado.

multiprocesamiento módulo, si es aplicable a su problema.

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