La principale recherche de cet article est que Flask implémente la fonction de demande non bloquante asynchrone, et l'implémentation spécifique est la suivante.
Récemment, lorsque je travaillais sur un projet IoT, je devais construire un serveur HTTP non bloquant asynchrone. Après avoir cherché des informations, j'ai constaté que je pouvais utiliser le package Gevent.
Gevent est une bibliothèque de réseaux simultanée Python qui utilise des Greenlets basés sur des boucles d'événements LibeVent pour fournir une API de synchronisation avancée. Voici un exemple de code:
à partir de gevent.wsgi import wsgiserverfrom votre application import apphttp_server = wsgiserver (('', 5000), app) http_server.serve_forever ()Vous trouverez ci-dessous une liste des codes non bloquants asynchrones de FLASK et le portez directement en cas de besoin à l'avenir.
# coding = utf-8 # Python Version: 3.5.1 # FlaskFrom Flask Import Flask, Demande, G # GEVENTFROM GEVENT IMPORT MONKEDFROM GEVENT.PYWSGI IMPORT WSGISERVERMONKEY.PATCH_ALL () # GEVENT EDIMPORT TIMAP = Flask (__ nom __) app.config.update(debug=true)@app.route ('/ asyn /', méthodes = ['get']) def test_asyn_one (): imprimer ("asyn a une demande!") Time.sleep (10) RETRIR __Name__ == "__Main__": # app.run () http_server = wsgiserver (('', 5000), app) http_server.serve_forever ()Pourquoi ajouter une instruction singe.patch_all ()? Il y a une explication détaillée sur le site officiel de Gevnet, voici une brève explication:
Le singe remplace soigneusement les fonctions et les classes du module de socket standard par leurs homologues coopératives. De cette façon, même les modules qui ne sont pas au courant de Gevent peuvent bénéficier de la course dans un environnement multi-green.
Traduction: le patch de singe remplace soigneusement les fonctions et les classes de modules de socket standard par des copies de code parallèle. De cette façon, le module peut permettre au gevent de mieux fonctionner dans l'environnement multi-greenlet sans le savoir.
Ouvrez le navigateur, première demande http://127.0.0.1:5000/asyn/, puis demandez http://127.0.0.1:5000/test/ cette interface dix fois. S'il s'agit d'un framework General Flask, l'interface suivante ne répondra pas.
Le contenu d'impression est le suivant:
Asyn a une demande!
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
Ce qui précède est tout le contenu de cet article sur la mise en œuvre par Flask de l'analyse des instances de la fonction de demande non bloquante asynchrones, j'espère qu'elle sera utile à tout le monde. Les amis intéressés peuvent continuer à se référer à d'autres sujets connexes sur ce site. S'il y a des lacunes, veuillez laisser un message pour le signaler. Merci vos amis pour votre soutien pour ce site!