thread java python multithreading jython

java - thread join python



jython multihilo (3)

Comencé a estudiar python hace un par de meses, luego encontré a Jython.

¿Los hilos funcionan correctamente en Jython, ya que no tiene un GIL ? Si es así, ¿puede sugerir un buen libro sobre la concurrencia (subprocesos)?


El aspecto inicialmente confuso puede ser que puede mezclar y combinar los mecanismos de concurrencia de Java y Jython. Pero todo parece funcionar. Las razones son:

  • Debajo de Jython está el mismo Java antiguo. Todos sus mecanismos de subprocesamiento robustos y estructuras de datos no se van a romper ni siquiera bajo la pesada maquinaria Jython.
  • Los hilos de Jython toman los hilos de Java como su chasis y agregan algo de superestructura para que hablen la API de hilos de Python. (No hay una mejor manera de facilitar el proceso de portar el código de Python). Pero la esencia de los dos tipos de hilos es similar. Excepto que con hilos Jython

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

Los modismos de Python son probablemente un poco más convenientes, porque, por ejemplo, si desea hacer el equivalente de synchronized (some_object) { ... } , se requiere un poco de manipulación , lo que probablemente sea menos legible que utilizando un RLock .


El mejor libro que he encontrado en multihilo es "Java Concurrency in Practice". Se concentra mucho en la concurrencia de subprocesos de Java, y es a la vez humilde y emocionante cuando empiezas a comprender los problemas y las posibilidades que presenta la concurrencia. Sin embargo, la copia que compré hace unos años tenía algunas erratas en la codificación, que exacerbaban un tema que ya tenía problemas cerebrales: verifique las erratas aquí: http://jcip.net/errata.html .

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

Por cierto, también amo a Jython y puedo confirmar que cualquier cosa relacionada con la concurrencia que pueda hacer en Java aparentemente puede hacer en Jython. Sin embargo, hay una advertencia: la concurrencia puede ser para la programación asíncrona (incluida la GUI) y / o para el rendimiento. Si para el último tiene un problema, en mi opinión: Jython, según mi experiencia, es aproximadamente 10 veces más lento que el programa Java equivalente.

Lo que esto significa es que sus módulos Jython más exigentes tendrán que llamar a algo distinto a Jython para las tareas de procesamiento 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 temido territorio de RMI. Eres más 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 para 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 en el sitio de Jython muestra que, hace solo 10 días, el 17/05/12, se lanzó la versión 2.7a1 ... una versión "Alpha". Esto debería contener el módulo de multiprocesamiento, que vino con Python 2.6. Sería interesante comprobar esto: si es así, presumiblemente te da la opción emocionante de vincular los procesos Jython y CPython (actualización más tarde: lamentablemente, por el momento parece que esto no es así; el nombre del módulo "multiprocesamiento" no se reconoció cuando lo intenté ) ...

Una última palabra: la mayoría de los expertos saben mucho más sobre estas cosas de lo que yo digo que la ley de Moore está siendo superada en importancia por la ley de Amdahl, que en resumen significa que el desafío abrumador de la programación de programas concurrentes verdaderos estables y escalables será inevitable en la futuro. Exactamente cuán fácil es la verdadera concurrencia (es decir, el subproceso) se puede hacer con el uso de herramientas inteligentes de análisis de código que no puedo decir, pero la inversión en este tema y las fascinantes e intelectuales nuevas disciplinas de razonamiento impuestas por la concurrencia probablemente valdrán la pena ... si te gusta un reto


Sí, con Jython tienes multihilo real . 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 GIL e implementa un soporte multihilo real basado en la implementación de JVM.

Le sugiero que eche un vistazo a este book y al de OReilly''s .