Tornado anuncia como "una, no bloqueante infraestructura de servidor web relativamente simple" y fue diseñado para resolver el problema C10K. Sin embargo, mirando a su envoltura de base de datos, que se envuelve MySQLdb, me encontré con el siguiente fragmento de código:¿Tornado realmente no bloquea?
def _execute(self, cursor, query, parameters):
try:
return cursor.execute(query, parameters)
except OperationalError:
logging.error("Error connecting to MySQL on %s", self.host)
self.close()
raise
Por lo que yo sé llamadas a la MySQLdb, que se construye en la parte superior de libmysqlclient
, están bloqueando.
¿Estoy en lo cierto al pensar que una consulta de larga duración haría que todo el servidor de Tornado no responda hasta que termine o hay magia en el código?
¿Qué esperas? No bloquear no significa que "todas las líneas se ejecutan simultáneamente". – zneak
-1 por aceptar una respuesta incorrecta; un servidor web no bloqueador no debe bloquear las solicitudes debido al acceso a la base de datos (acceso al disco) para otras solicitudes. –
Agradezco el comentario, pero creo que acepté la respuesta que responde a mi pregunta: el uso del contenedor de MySQL hará que todo el servidor se bloquee. La respuesta parece ser: sí, lo hará. Tornado no proporciona un grupo de procesos para hablar con MySQL, por lo que bloquea. Tu respuesta también tiene sentido, pero Nicholas estuvo aquí primero. – ipartola