Tornado рекламирует себя как «относительно простой, неблокирующий веб-серверный фреймворк» и был разработан для решения проблемы C10k. Однако, глядя на их обертке базы данных, которая оборачивает MySQLDb, я наткнулся на следующий фрагмент кода:Действительно ли Торнадо не блокирует?
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
Насколько я знаю, звонки на MySQLdb, который построен на вершине libmysqlclient
, блокируют.
Я правильно понял, что долговременный запрос сделает весь сервер Tornado невосприимчивым до тех пор, пока он не закончится или не будет волшебства в коде?
Что вы ожидаете? Неблокирование не означает, что «все строки запускаются одновременно». – zneak
-1 за неправильный ответ; неблокирующий веб-сервер не должен блокировать запросы из-за доступа к базе данных (доступа к диску) для других запросов. –
Я ценю комментарий, но я считаю, что принял ответ, который касается моего вопроса: будет ли использование оболочки MySQL сделать весь серверный блок. Ответ кажется: да, будет. Tornado не предоставляет пул процессов для общения с MySQL, поэтому он блокирует. Ваш ответ тоже имеет смысл, но Николас был здесь первым. – ipartola