2011-11-15 17 views
7

Estoy escribiendo una aplicación web de Django. A partir de ahora, Django does not support Python 3. A los efectos de mi aplicación web, y sin entrar en muchos detalles, esencialmente necesito usar algunas bibliotecas que solo admiten Python 3. Baste decir que después de una investigación exhaustiva no se encontró una alternativa 2.x.¿Cuál es el mejor método para llamar a un programa de Python 3.x desde Python 2.x?

Así que mi pregunta es esta: ¿cómo debo ir sobre esto?

Tengo ambos Python 2 y 3 instalados en mi servidor, y tengo el código de Python 3 escrito y esperando ser llamado. Estaba considerando simplemente usar el módulo subprocess, llamando eficazmente a Python 3 desde la línea de comandos, pero la pregunta es, ¿es este el mejor método o hay una mejor práctica que podría usar aquí? Usar subprocess me parece bastante hackoso. No me malinterpreten, estoy de acuerdo con hackish, solo quiero asegurarme de que no haya nada más que deba hacer en su lugar.

+0

¿Qué le parece usar [cherrypy] (http://cherrypy.org/) y hacer todo en Python 3? –

+0

xmlrpc podría ser una alternativa simple al subproceso – gecco

+1

¿Ha intentado utilizar el programa 3to2 para ver si las bibliotecas de Python 3 no especificadas se pueden convertir a Python 2 automáticamente? ¿Has intentado utilizar Martin von Löwis [puerto de Django a Python 3] (https://bitbucket.org/loewis/django-3k/) para que todo funcione en Python 3? –

Respuesta

6

Desde los Python y Python 3 2 intérpretes son totalmente ejecutables independientes y tienen bibliotecas independientes instalados en el sistema, utilizando subprocess acogerse a alguno de los otros es la mejor práctica. No es un truco en absoluto. Hay varias maneras de pasar datos entre ellos, pero los dos intérpretes deben ejecutarse como procesos separados.

Dicho esto, es posible que deba tener en cuenta el tiempo de inicio asociado con el inicio de un proceso de intérprete. Eso vuelve a cómo pasar datos entre los dos procesos. Si su código Python 2 va a llamar con frecuencia a las rutinas de Python 3, es posible que necesite estructurar el programa Python 3 como un daemon. Pero aún usaría subprocess para ejecutarlo.

+0

Impresionante. Muchas gracias. En cuanto a si necesita terminar como un proceso ... eso tomará un poco de reflexión. Solo necesita ser llamado una vez cuando un usuario se registra, por lo que puede que no sea necesario hacerlo a corto plazo, pero en teoría, si mi aplicación web fuera útil, podría ser una opción conveniente. Todo el proceso no debería tomar más de 5 segundos, incluso si la conexión a Internet es realmente lenta. –

1

Ejecute el programa 3.x como un servicio por separado y luego conéctese utilizando algún tipo de mecanismo RPC?

Cuestiones relacionadas