2016-05-09 4 views
5

Я пытаюсь использовать веб-фреймворк Falcon с асинхронными рабочими, такими как gevents и asyncio. Я искал учебники, но я не смог найти ни одного, сочетающего реализацию gevent с falcon. Поскольку я никогда не использовал gevents раньше, я не уверен, как пройти тестирование этой комбинации. Может ли кто-нибудь привести меня к примеру или учебнику?Как использовать Gevents с Falcon?

Спасибо! :)

ответ

3

Я просто хотел построить новый сайт с Falcon и gevent, что-то, что я делал в прошлом. Я знал, что в этом есть что-то странное, поэтому я искал в Интернете и нашел ваш вопрос. Я несколько удивлен, что никто не ответил. Итак, я вернулся, чтобы посмотреть на моем предыдущем коде и нижеследующее является основной скелет, чтобы встать и работает с сокола и GEvent (что делает для очень быстро рамки):

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 

Как вам может видеть, большой трюк в переделке обезьян. Помимо этого, это действительно довольно просто. Надеюсь, это поможет кому-то!

+1

Эта настройка отлично подойдет для меня. Стоит отметить, что не только сам Falcon может работать с gevents, но вы также можете использовать конструкции gevents, такие как 'spawn',' sleep' и 'Semaphore' в вашем приложении. Я использовал их для создания фоновых работников, которые выполнялись независимо от кода, управляемого запросами. – killthrush

+1

Я также попытался запустить Falcon, используя сервер Bjoern, в отличие от pywsgi с поддержкой gevent. Первый быстрее и может поддерживать более длительные запросы/сек, основанные на некоторых моих тестах hello-world, но цикл событий непрозрачен, и вы не можете использовать gevent в своем коде приложения. Настройка @ kvaruni позволяет вам использовать цикл событий gevent. Это, безусловно, нужно учитывать при выборе сервера WSGI для размещения Falcon. – killthrush