A principal pesquisa deste artigo é que o Flask implementa a função de solicitação não síncrona que não bloqueia, e a implementação específica é a seguinte.
Recentemente, quando eu estava trabalhando em um projeto de IoT, eu precisava criar um servidor HTTP não-síncrono que não bloqueie. Depois de procurar informações, descobri que poderia usar o pacote Gevent.
Gevent é uma biblioteca de rede simultânea Python que usa o Greenlets com base nos loops de eventos Libevent para fornecer uma API avançada de sincronização. Aqui está um exemplo de código:
De Gevent.WSGI importar wsgiserverFrom YourApplication Import apphttp_server = wsgiserver (('', 5000), app) http_server.serve_forever ()Abaixo está uma lista dos códigos não-bloqueadores assíncronos do Flask e o portar diretamente quando necessário no futuro.
# coding = UTF-8# Python Versão: 3.5.1# Flaskfrom Flask Importar Flask, Solicitação, G# GeventFrom Gevent importar macacão de gevent.pywsgi importar wsgiserververmonkey.patch_all ()# gevent endimport timeApp = Flask (__ Nome __) app.config.update(debug=true)@app.route ('/asyn/', Methods = ['get')) DEF test_asyn_one (): Print ("Asyn tem uma solicitação!") Time.sleep (10) 'helloen''@app.route ('/')/')/') e helloen ('). __name__ == "__Main__": # App.run () http_server = wsgiserver (('', 5000), app) http_server.serve_forever ()Por que adicionar declaração Monkey.patch_all ()? Há uma explicação detalhada no site oficial da Gevnet, aqui está uma breve explicação:
Macaco substitua cuidadosamente as funções e classes no módulo de soquete padrão por seus colegas cooperativos. Dessa forma, até os módulos que não têm conhecimento do Gevent podem se beneficiar da execução em um ambiente multi-verde.
Tradução: o patch de macaco substitui cuidadosamente as funções e classes de módulos de soquete padrão por cópias de código paralelo. Dessa forma, o módulo pode permitir que o geneve seja melhor no ambiente multi-verde sem saber.
Abra o navegador, primeiro solicite http://127.0.0.1:5000/asyn/ e solicite http://127.0.0.1:5000/test/ Esta interface dez vezes. Se for uma estrutura geral do Flask, a interface subsequente não responderá.
O conteúdo de impressão é o seguinte:
Asyn tem um pedido!
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
O exposto acima é todo o conteúdo deste artigo sobre a implementação de Flask da análise de instância de função de solicitação assíncrona que não bloqueia, espero que seja útil para todos. Amigos interessados podem continuar se referindo a outros tópicos relacionados neste site. Se houver alguma falha, deixe uma mensagem para apontá -la. Obrigado amigos pelo seu apoio para este site!