what python design cgi queue

what - Cola de Python CGI



python cgi post (1)

Estoy trabajando en un CGI bastante simple con Python. Estoy a punto de ponerlo en Django, etc. La configuración general es bastante estándar en el servidor ( es decir, el cómputo se realiza en el servidor):

  1. El usuario carga los archivos de datos y hace clic en el botón "Ejecutar"
  2. El servidor ahorra trabajos en paralelo detrás de escena, usando mucha RAM y la potencia del procesador. ~ 5-10 minutos más tarde (caso de uso promedio), el programa termina, habiendo creado un archivo de su salida y algunos archivos de figura .png.
  3. El servidor muestra una página web con figuras y texto resumido

No creo que vayan a haber cientos o miles de personas usando esto a la vez; sin embargo, debido a que el cálculo en curso requiere una buena cantidad de RAM y de potencia del procesador (cada instancia bifurca la mayor parte de la tarea de uso intensivo de la CPU utilizando el conjunto de Python).

Me preguntaba si sabes si valdría la pena usar un sistema de cola. Encontré un módulo de Python llamado beanstalkc , pero en la página decía que era un sistema de colas "en memoria".

¿Qué significa "en memoria" en este contexto? Me preocupa la memoria, no solo el tiempo de CPU, así que quiero asegurarme de que solo se ejecute un trabajo (o que se mantenga en la memoria RAM, si recibe o no el tiempo de CPU) a la vez.

Además, estaba tratando de decidir si

  • la página de resultados (servida por el CGI) debería decirle su posición en la cola (hasta que se ejecute y luego muestre la página de resultados reales)

    O

  • el usuario debe enviar su dirección de correo electrónico al CGI, que le enviará por correo electrónico el enlace a la página de resultados cuando se complete.

¿Cuál cree que es la metodología de diseño adecuada para un CGI de tráfico ligero para un problema de este tipo? El consejo es muy apreciado.


Definitivamente use apio . Puede ejecutar un servidor amqp o creo que puede demandar a la base de datos como una cola para los mensajes. Le permite ejecutar tareas en segundo plano y puede usar varias máquinas de trabajo para hacer el procesamiento si lo desea. También puede hacer trabajos cron basados ​​en bases de datos si usa django-apio

Es tan simple como esto ejecutar una tarea en segundo plano:

@task def add(x, y): return x + y

En un proyecto que tengo, está distribuyendo el trabajo en 4 máquinas y funciona muy bien .