2009-12-16 12 views
9

Soy nuevo en Python y parece que el módulo multiprocesamiento y subprocesos no son muy interesantes y adolecen de los mismos problemas, como los hilos en Perl. ¿Existe alguna razón técnica por la que el intérprete no pueda usar subprocesos ligeros como posix para hacer una implementación eficiente de subprocesos que realmente se ejecute en varios núcleos?¿Por qué no hay ningún hilo ligero real para Python?

Respuesta

22

Es es utilizando hilos POSIX. El problema es el GIL.

Tenga en cuenta que GIL no es parte de la especificación Python --- es parte de la implementación de referencia CPython. Jython, por ejemplo, no sufre de este problema.

Dicho esto, miró en Stackless?

+0

Además, el GIL hace que Cpython sea más rápido: muchos lo intentaron pero eliminarlo parece degradar el rendimiento. – nosklo

+6

nosklo: puede ser más exacto decir que GIL hace que el CPython de subproceso sea más rápido. las modificaciones que lo eliminaron lograron hacer que el código multiproceso de los algoritmos paralelos se ejecutara más rápido que las implementaciones equivalentes de un solo subproceso, pero la velocidad del código de un solo subproceso se redujo considerablemente –

+0

Sin duda una lástima dada la importancia de los chips multinúcleo y la escalabilidad. – piotr

0

Piotr,

Es posible que desee echar un vistazo a sin pérdida de velocidad (http://www.stackless.com/) que es una versión modificada del pitón corriendo tasklets ligeros en el paso de mensajes de la moda (estilo Erlang).

No estoy seguro de si está buscando una solución multinúcleo, pero hurgar sin pilas le puede dar lo que está buscando.

Ben

+0

¿Pondrá varias CPU para usar? – piotr

+0

No por sí mismo: podría considerar una torcedura para esto, aunque si buscaba una verdadera escalabilidad multinúcleo (sin distribuir su aplicación), Python podría no ser la mejor opción, es posible que desee considerar Erlang. –

+0

He estado leyendo los razonamientos sobre la escalabilidad del proceso. Entonces dicen que si realmente quieres escalar más allá de los núcleos locales necesitarás varios procesos de todos modos y, por lo tanto, el GIL no es un gran problema. Gracias por la sugerencia de Erlang, parece que Erlang también lo hace por proceso. – piotr

Cuestiones relacionadas