2016-05-09 11 views
5

Tôi đang cố gắng sử dụng khung web Falcon với công nhân không đồng bộ như gevents và asyncio. Tôi đã được tìm kiếm xung quanh cho hướng dẫn, nhưng tôi đã không thể tìm thấy bất kỳ mà kết hợp thực hiện gevent với chim ưng. Vì tôi chưa bao giờ sử dụng gevents trước đây, tôi không chắc chắn làm thế nào để đi xung quanh thử nghiệm sự kết hợp này. Ai đó có thể hướng dẫn tôi một ví dụ hoặc một hướng dẫn?Làm thế nào để sử dụng Gevents với Falcon?

Cảm ơn bạn! :)

Trả lời

3

Tôi chỉ đang tìm cách xây dựng một trang web mới với Falcon và gevent, điều mà tôi đã làm trong quá khứ. Tôi biết rằng có điều gì đó kỳ lạ về nó, vì vậy tôi đã tìm kiếm trực tuyến và tìm thấy câu hỏi của bạn. Tôi hơi ngạc nhiên khi chưa có ai trả lời. Vì vậy, tôi quay trở lại để có một cái nhìn tại mã trước đây của tôi và sau đây là bộ xương cơ bản để có được và chạy với Falcon và gevent (mà làm cho một khuôn khổ rất nhanh):

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 

Như bạn có thể thấy, mẹo lớn là trong bản vá khỉ. Ngoài ra, nó thực sự là khá đơn giản. Hy vọng điều này sẽ giúp một ai đó!

+1

Thiết lập này hiệu quả với tôi. Cần lưu ý rằng không chỉ Falcon có thể làm việc với các gevents, nhưng bạn cũng có thể tận dụng các cấu trúc gevents như 'spawn',' sleep' và 'Semaphore' trong ứng dụng của bạn. Tôi đã sử dụng chúng để tạo công nhân nền chạy độc lập với mã được yêu cầu. – killthrush

+1

Tôi cũng đã thử chạy Falcon bằng cách sử dụng máy chủ Bjoern như trái ngược với pywsgi kích hoạt gevent. Trước đây là nhanh hơn và có thể hỗ trợ các yêu cầu/giây được duy trì cao hơn dựa trên một số thử nghiệm hello-world của tôi, nhưng vòng lặp sự kiện không rõ ràng và bạn không thể sử dụng gevent trong mã ứng dụng của mình. @ kvaruni của thiết lập cho phép bạn gõ vào vòng lặp sự kiện gevent. Đó chắc chắn là điều cần xem xét khi chọn một máy chủ WSGI để lưu trữ Falcon. – killthrush

Các vấn đề liên quan