Servidor multiusuario Python / Twisted: ¿qué es más eficiente?
-
19-08-2019 - |
Pregunta
En Python, si quiero que mi servidor escale bien en cuanto a CPU, obviamente necesito generar múltiples procesos. Me preguntaba cuál es mejor (usando Twisted):
A) El proceso del administrador (el que mantiene las conexiones de socket reales) coloca los paquetes recibidos en una cola compartida (la del módulo de multiprocesamiento), y los procesos de trabajo extraen los paquetes de la cola, los procesan y envían resultados de vuelta al cliente.
B) El proceso del administrador (el que mantiene las conexiones de socket reales) inicia un subproceso diferido y luego llama a la función apply () en el grupo de procesos. Una vez que el resultado regresa del proceso de trabajo, el gerente devuelve el resultado al cliente.
En ambas implementaciones, los procesos de trabajo usan grupos de subprocesos para poder trabajar en más de un paquete a la vez (ya que habrá muchas consultas en la base de datos).
Solución
Creo que B es problemático. El hilo solo se ejecutaría en una CPU, e incluso si ejecuta un proceso, el hilo todavía se está ejecutando. A puede ser mejor.
Es mejor intentar medir ambos en términos de tiempo y ver cuál es más rápido y cuál escala bien. Sin embargo, reiteraré que dudo mucho que B vaya a escalar bien.
Otros consejos
Creo que " A " es la respuesta que desea, pero no tiene que hacerlo usted mismo.
¿Ha considerado ampolla ?