Основное исследование в этой статье заключается в том, что Flask реализует асинхронную не блокирующую функцию запроса, а конкретная реализация заключается в следующем.
Недавно, когда я работал над проектом IoT, мне нужно было создать асинхронный неблокирующий HTTP-сервер. После поиска информации я обнаружил, что могу использовать пакет Gevent.
Gevent - это параллельная сетевая библиотека Python, которая использует Greenlets на основе циклов событий Libevent, чтобы обеспечить расширенную API синхронизации. Вот пример кода:
от gevent.wsgi import wsgiserverfrom yourapplication import apphttp_server = wsgiserver (('', 5000), app) http_server.serve_forever ()Ниже приведен список асинхронных неблокирующих кодов Флоки и переносить его непосредственно, когда это необходимо в будущем.
# CODING = UTF-8# версия Python: 3.5.1# Flaskfrom Flask Import Flak, запрос, G# geventfrom gevent import monkeyfrom gevent.pywsgi import wsgiservermonkey.patch_all ()# gevent endimport timeapp = Flask (__ name __) app.config.update(debug=true)@app.route ('/asyn/', methods = ['get']) def test_asyn_one (): print («asyn имеет запрос! __name__ == "__main__": # app.run () http_server = wsgiserver (('', 5000), app) http_server.serve_forever ()Зачем добавлять оператор Monkey.patch_all ()? На официальном сайте Gevnet есть подробное объяснение, вот краткое объяснение:
Обезьяна тщательно заменяет функции и классы в стандартном модуле сокета на их кооперативные аналоги. Таким образом, даже модули, которые не знают о Gevent, могут выиграть от работы в многогранной среде.
Перевод: Обезьяна Питч осторожно заменяет функции и классы стандартных модулей сокетов с помощью копий параллельных кодов. Таким образом, модуль может позволить Gevent лучше работать в многогранной среде, не зная об этом.
Откройте браузер, первый запрос http://127.0.0.1:5000/asyn/, а затем запросить http://127.0.0.1:5000/test/ этот интерфейс десять раз. Если это общая фантазия, последующий интерфейс не будет отвечать.
Печатный контент заключается в следующем:
У Асина есть запрос!
127.0.0.1 - - [2016-10-24 20:45:10] «Get/test/http/1,1" 200 126 0,000000
127.0.0.1 - - [2016-10-24 20:45:11] «Get/test/http/1,1" 200 126 0,000000
127.0.0.1 - - [2016-10-24 20:45:11] «Get/test/http/1,1" 200 126 0,000000
127.0.0.1 - - [2016-10-24 20:45:12] «Get/test/http/1,1" 200 126 0,000000
127.0.0.1 - - [2016-10-24 20:45:12] "GET/TEST/HTTP/1,1" 200 126 0,000998
127.0.0.1 - - [2016-10-24 20:45:13] «Get/test/http/1,1" 200 126 0,001001
127.0.0.1 - - [2016-10-24 20:45:14] «Get/test/http/1,1» 200 126 0,000000
127.0.0.1 - - [2016-10-24 20:45:14] «get/test/http/1,1» 200 126 0,001014
127.0.0.1 - - [2016-10-24 20:45:15] «Get/test/http/1,1" 200 126 0,001000
127.0.0.1 - - [2016-10-24 20:45:15] «Get/test/http/1,1" 200 126 0,000000
127.0.0.1 - - [2016-10-24 20:45:18] "Get/asyn/http/1.1" 200 126 10.000392
Выше приведено все содержание этой статьи о реализации Асинхронного неблокирующего запроса, я надеюсь, что это будет полезно для всех. Заинтересованные друзья могут продолжать ссылаться на другие связанные темы на этом сайте. Если есть какие -либо недостатки, пожалуйста, оставьте сообщение, чтобы указать это. Спасибо, друзья, за вашу поддержку на этом сайте!