2016-05-09 1 views
5

J'essaye d'employer le cadre de Web de Falcon avec des ouvriers async comme les gevents et l'asyncio. J'ai cherché des tutoriels, mais je n'ai pas réussi à trouver une combinaison de gevent avec Falcon. Comme je n'ai jamais utilisé de gevents auparavant, je ne sais pas trop comment tester cette combinaison. Quelqu'un peut-il me guider vers un exemple ou un tutoriel?Comment utiliser Gevents avec Falcon?

Merci! :)

Répondre

3

Je cherchais juste à construire un nouveau site Web avec Falcon et Gevent, quelque chose que j'avais fait par le passé. Je savais qu'il y avait quelque chose d'étrange, alors j'ai cherché en ligne et trouvé votre question. Je suis un peu surpris que personne n'ait encore répondu. Donc, je suis retourné à jeter un oeil à mon code précédent et le suivant est le squelette de base pour se lever et courir avec Falcon et gevent (ce qui en fait un très rapide cadre):

from gevent import monkey, pywsgi # import the monkey for some patching as well as the WSGI server 
monkey.patch_all() # make sure to do the monkey-patching before loading the falcon package! 
import falcon # once the patching is done, we can load the Falcon package 


class Handler: # create a basic handler class with methods to deal with HTTP GET, PUT, and DELETE methods 
    def on_get(self, request, response): 
     response.status = falcon.HTTP_200 
     response.content_type = "application/json" 
     response.body = '{"message": "HTTP GET method used"}' 

    def on_post(self, request, response): 
     response.status = falcon.HTTP_404 
     response.content_type = "application/json" 
     response.body = '{"message": "POST method is not supported"}' 

    def on_put(self, request, response): 
     response.status = falcon.HTTP_200 
     response.content_type = "application/json" 
     response.body = '{"message": "HTTP PUT method used"}' 

    def on_delete(self, request, response): 
     response.status = falcon.HTTP_200 
     response.content_type = "application/json" 
     response.body = '{"message": "HTTP DELETE method used"}' 

api = falcon.API() 
api.add_route("/", Handler()) # set the handler for dealing with HTTP methods; you may want add_sink for a catch-all 
port = 8080 
server = pywsgi.WSGIServer(("", port), api) # address and port to bind to ("" is localhost), and the Falcon handler API 
server.serve_forever() # once the server is created, let it serve forever 

Comme vous peut voir, le gros tour est dans le patch-singe. A part ça, c'est vraiment simple. J'espère que cela aide quelqu'un!

+1

Cette configuration a bien fonctionné pour moi. Il est à noter que non seulement Falcon peut fonctionner avec des gevents, mais vous pouvez également profiter des constructions gevents comme 'spawn',' sleep' et 'sémaphore' dans votre application. Je les ai utilisés pour créer des travailleurs d'arrière-plan qui s'exécutaient indépendamment du code axé sur les demandes. – killthrush

+1

J'ai également essayé d'exécuter Falcon en utilisant le serveur Bjoern par opposition à pywsgi activé par gevent. Le premier est plus rapide et peut supporter des requêtes soutenues plus élevées/s en fonction de certains de mes tests Hello World, mais la boucle d'événement est opaque et vous ne pouvez pas utiliser gevent dans votre code d'application. La configuration de @ kvaruni vous permet d'accéder à la boucle d'événements gevent. C'est certainement quelque chose à considérer lors de la sélection d'un serveur WSGI pour héberger Falcon. – killthrush