Mi algoritmo de ML, escrito en Python, está casi completo. Quiero que sea un sitio web. ¿Cuál es la mejor manera de conectar mi script Python a Meteor?

Es posible que esté pidiendo mucha más complejidad de la que realmente necesita.

Si ya tienes un montón de código funcionando en Python, pregúntate por qué necesitas Meteor. ¿Realmente necesitas la magia única del lado del cliente que proporciona Meteor? ¿Necesita datos en tiempo real sobre el cliente y sincronización de cliente a cliente? ¿Necesita compensación por latencia para las escrituras del cliente? ¿Necesita una interfaz de usuario de cliente pesado o es suficiente la representación del lado del servidor? Solo entonces agregaría la complejidad del puente a Meteor. De lo contrario, probablemente representaría los resultados de ML en una respuesta HTML simple con Flask o equivalente.

En caso de que necesites la magia Meteor, pregunta por qué necesitas Python. Por la forma en que está escrita su pregunta, parece que usted mismo escribió un algoritmo ML desde cero. Si ese es el caso, probablemente lo volvería a escribir para Node (probablemente usando CoffeeScript) y buscaría un convertidor de sintaxis para ayudarme a comenzar. Es poco probable que su algoritmo sea demasiado enorme. Node es conocido por superar a Python. Si ha utilizado algunas bibliotecas externas para ML en python, esa podría ser una historia diferente. Si está utilizando una buena biblioteca, hay muchas posibilidades de que también tenga una implementación de Nodo o C ++ o un puerto que pueda usar. El enfoque final para las tareas pesadas de CPU como ML sería tenerlas escritas en C ++ y envueltas en un complemento Node que las haga triviales para llamar desde JavaScript y el código del lado del servidor de Meteor. Los lenguajes interpretados / script son mucho menos adecuados para las tareas de CPU que C ++. Puntos de bonificación por ejecutar su trabajo pesado en la GPU, lo que probablemente sea más fácil cuando se usa una buena biblioteca de aprendizaje automático escrita en C ++.

La mayor pregunta es su elección de base de datos. Meteor viene con soporte MongoDB predeterminado, y conectarse a cualquier otro tipo de base de datos de Meteor probablemente introducirá más complejidad de la que realmente desea, o requerirá que duplique registros entre su base de datos primaria y Mongo. Dependiendo de sus requisitos de ML, puede o no ser adecuado para MongoDB. Dependiendo de cómo configure sus registros e índices, es posible que pueda salirse con la suya, es realmente difícil decirlo sin saber más sobre lo que realmente está haciendo en ML. En general, trataría de evitar demasiadas escrituras en la base de datos, y probablemente preferiría cargar más datos en la memoria para ML y manipulación extensas antes de guardar ese estado de una vez en la base de datos cuando haya terminado sus iteraciones.

Si terminas decidiendo que debes tener Python y Meteor en el mismo proyecto, trataría a Meteor como tu “aplicación” y a Python como el nivel de “trabajador”. En esta arquitectura, la aplicación le dice al trabajador qué hacer, ya sea llamándolo directamente (a través de su API Flask) o escribiendo en la base de datos. Si planea agregar más instancias de trabajador, podría implementar una cola de tareas para que el trabajador retire y trabaje usando una colección mongo o un servicio de colas de mensajes dedicado como RabbitMQ. El trabajador se conecta a la misma base de datos y supervisa los nuevos registros, recibe llamadas de la aplicación o escucha los mensajes de la cola de mensajes para trabajar en cosas. Conecte Python a Mongo directamente y realice escrituras directamente. Meteor los recogerá automáticamente y los enviará a sus clientes a través de encuestas o el mejor controlador de oplog.

Si necesita que el trabajador de Python inicie llamadas al servidor de aplicaciones, use una implementación de cliente DDP en Python para conectarse desde su trabajador al servidor de aplicaciones para que pueda monitorear los cambios de estado con suscripciones o enviar señales de control con Meteor.call ().

Una vez más, enfatizo que esto se siente como si fuera más complejo de lo que realmente necesita, le insto a que considere quedarse con Python o Meteor, porque esto suena como un proyecto de nivel de pasatiempo y realmente no quiere gastar tu tiempo en pegar tantas cosas juntas. En caso de que desee convertir esto en una gran aplicación de escala de producción, y Meteor sea la opción adecuada para usted, entonces Python probablemente no sea la mejor manera de implementar ML pesado, es probable que desee tener eso implementado en C ++, lo que lo hace más eficiente y trivial para usar desde un servidor Meteor.

Gracias por A2A.
¿Has considerado usar GoogleAppEngine (GAE)?
Tiene una versión de Python, por lo que puede tener toda su pila en Python.
Además, tendrá una base de datos robusta lista para usar, con una configuración mínima requerida.
Tiene una cuota significativa de uso gratuito.
https://cloud.google.com/appengine/