2012-05-13 21 views
16

Empecé a estudiar Python hace un par de meses, luego encontré a Jython.jython multithreading

¿Los subprocesos funcionan correctamente en Jython, ya que es doesn't have a GIL? Si es así, ¿puedes sugerir un buen libro sobre concurrencia (subprocesamiento)?

+3

Esta es una buena pregunta, sinceramente, no sé la respuesta, pero tengo varios hilos con ambos, así que tal vez una mejor pregunta es: '¿Tengo que usar el multiproceso de Python o el enrutamiento de Java? Estoy seguro de que funciona, pero no estoy seguro de cuál usar, ya que jython es una mezcla de ambos. – Lostsoul

+0

¿Te refieres a Jpython o Jython? Este es el tipo de pregunta abierta que no es realmente una buena opción para SO, por cierto. –

+0

Según [esta pregunta (http://stackoverflow.com/questions/4227269/hidden-multithreading-bottlenecks-in-jython), la respuesta es sí. Entiendo que es posible acceder a las bibliotecas de subprocesamiento de python o al soporte de concurrencia de Java a través de jython. –

Respuesta

5

El mejor libro que he encontrado en multihebra es "Concurrencia de Java en la práctica". Se concentra mucho en la concurrencia de subprocesos de Java, y es a la vez humillante y emocionante cuando comienzas a comprender los problemas y las posibilidades que presenta la concurrencia. La copia que compré hace unos años tenía algunas erratas en la codificación, lo que exacerbó un tema que ya desafía el cerebro: echa un vistazo a la errata aquí: http://jcip.net/errata.html.

Aunque está diseñado para desarrolladores de Java que quieran aventurarse en la concurrencia (que por cierto incluye a cualquiera que alguna vez haya usado una interfaz GUI de cualquier tipo), estoy seguro de que las dificultades técnicas y sutilezas del libro se aplican a cualquier implementación de concurrencia

Por cierto, también me encanta Jython y puedo confirmar que cualquier cosa en cuanto a la simultaneidad que se pueda hacer en Java aparentemente se puede hacer en Jython. Sin embargo, hay una advertencia: la concurrencia puede ser para la programación asincrónica (incluida la GUI) y/o para el rendimiento. Si para este último tiene un problema, en mi opinión: Jython en mi experiencia se ejecuta aproximadamente 10 veces más lento que el programa equivalente de Java.

Lo que esto significa es que sus módulos Jython más exigentes tendrán que llamar a algo más que a Jython para las tareas de cálculo de números. Al mismo tiempo, Jython hasta ahora * no ha tenido el módulo de multiprocesamiento de Python, por lo que las comunicaciones entre procesos están fuera, a menos que se aventure en el territorio temido de RMI. Eres más un hombre/mujer que yo si tomas esa opción. Pero todo está bien: consulte "La guía definitiva de Jython" en http://www.jython.org ... el capítulo 19 es una especie de introducción a la concurrencia, y el capítulo 10 trata sobre la integración de Java y Jython (pista: es absurdamente fácil).

  • interesante: un vistazo rápido al sitio Jython muestra que, hace apenas 10 días, 17/05/12, se lanzó la versión 2.7a1 ... una versión "Alpha". Esto debería contener el módulo de multiprocesamiento, que entró con Python 2.6. Sería interesante comprobar esto: si es así, presumiblemente, ofrece la interesante opción de vincular los procesos de Jython y CPython (actualización posterior: por desgracia, por el momento parece que no es así), el nombre de módulo "multiprocesamiento" no se reconoció cuando lo intenté) ...

PS una última palabra: la mayoría de los expertos que saben mucho más acerca de estas cosas que digo que la ley de Moore está siendo reemplazado en importtance por la ley de Amdahl, que en definitiva significa que el enorme desafío de estabilidad de programación y los programas simultáneos verdaderos escalables serán inevitables en el futuro. No puedo decir exactamente qué tan fácil es la concurrencia real (es decir, hilo) con el uso de herramientas inteligentes de análisis de código, pero la inversión en este tema y las fascinantes e intelectuales nuevas disciplinas de razonamiento impuestas por concurrencia probablemente darán frutos ... si te gusta un desafío

3

Sí, con Jython tienes real multi-threading. Jython (sucesor de JPython) es una implementación de Python que se ejecuta en la JVM. Una de las principales diferencias entre Jython y el proyecto original es que el primero no tiene el GIL e implementa un soporte real multihilo basado en la implementación de la JVM.

Le sugiero que eche un vistazo a este book y el OReilly's uno.

0

El aspecto inicialmente confuso puede ser you can mix and match los mecanismos de concurrencia de Java y Jython. Pero todo parece funcionar.Las razones son:

  • Debajo de Jython está el mismo viejo Java. Todos sus robustos mecanismos de enhebrado y estructuras de datos no van a alcanzar un punto de equilibrio bajo la pesada maquinaria de Jython.
  • Los subprocesos de Jython toman los subprocesos de Java como su chasis y añaden alguna superestructura para que hablen la API de subprocesos de Python. (No hay mejor manera de hacer que portar el código de Python enhebrado sea más fácil). Pero la esencia de los dos tipos de subprocesos es similar. Excepto que con subprocesos Jython

    ... no hay prioridades, no hay grupos de subprocesos y subprocesos que no se pueden destruir, detener, suspender, reanudar o interrumpir. [1]

    modismos

El Python son probablemente un poco más conveniente, porque, por ejemplo, si desea hacer el equivalente de synchronized (some_object) { ... }, hay a small bit of fiddling required, que es probable que sea menos legible que el uso de un RLock .