Любые предложения, используя неблокирующий API-интерфейса MySQL на торнадо в Питон3?


Я надеялся, что поддержка tornado для асинхронной работы с базой данных sql, после того как я прочитал исходный код,

Http://www.tornadoweb.org/documentation/_modules/tornado/database.html#Connection

Вздох, они блокируют версию.вот вам и выбор .

План: найти набор API, похожими на mysqldb модуль, за исключением их использования обратного вызова, чтобы вернуть результат.извините, я не нашел тот, который показывает примеры, что их api может обрабатывать неблокирующую операцию mysql

План Б: используйте версию блока .я слышал, что автор tornado предлагает разработчикам использовать блочную версию и чрезвычайно оптимизировать ваш sql-запрос для сокращения периода блокировки.

В моем случае: сервер должен обрабатывать запрос на получение 2k в секунду в час пик, и большинство из них нуждаются в запросе и обновлении из базы данных, предполагают, что каждая операция занимает 10 МС,10 мс*2k более 20 С ,что было бы nightmare.in многопоточное программирование по крайней мере я могу сделать больше соединений для более среднего ответа время.

Возможно,я упустил какой-то момент здесь, у меня не так много опыта для разработки бэкенда.однако я все еще думаю, что использование blocking io api-это отстой, в то время как фреймворк не блокирует.

План C: drop MySql use mongoDB, я слышал, что mongoDB имеет асинхронный API реализации Python с именем asyncmongo, но я не уверен, что риск изучать mongoDB и принимать mongoDB как наш бизнес-выбор

1   3  

1 ответ:

Другой вариант-настройка многопроцессорной обработки ( http://docs.python.org/library/multiprocessing.html?highlight=multiprocessing#multiprocessing) и использовать один из процессов в качестве администратора очередей для БД.

Комбинируйте многопроцессорную обработку с эффективными SQL-запросами, и вы должны свести к минимуму общее воздействие. Блокирующие вызовы будут выполняться только в процессе администратора очередей обработки БД, а остальные приложения могут выполняться без блокировки. Пострадали только люди те, кто пытается одновременно выполнить запрос к БД.