2013-09-24 31 views
10

Flask là một máy chủ web đơn luồng. Nhưng tôi muốn làm cho nó sẽ không chặn khi xử lý một số yêu cầu tốn thời gian.Làm thế nào để làm cho phản ứng bình phản ứng với máy khách một cách không đồng bộ?

Ví dụ:

from flask import Flask 
import time 
import sys 
app = Flask(__name__) 

@app.route("/") 
def hello(): 
    print "request" 
    sys.stdout.flush() 
    for _ in range(10000000): 
     for j in range(10000000): 
      i = 1 
    return "Hello World!" 

if __name__ == "__main__": 
    app.run(debug=True) 

tôi muốn khi mọi yêu cầu của khách hàng đến máy chủ, nó luôn luôn đầu ra "yêu cầu" trên giao diện điều khiển ngay lập tức. Tôi đã thử gunicorn và chạy với gunicorn -k gevent -w 4 a:app nhưng nó vẫn xuất hiện đồng bộ.

+3

http://stackoverflow.com/questions/18430692/perform-task-directly-after-returning-json/18430861#18430861 –

+0

http://python-rq.org/ – zenpoy

+1

_ "Flask là một trang web chủ đề duy nhất máy chủ. "_ Điều này không chính xác. Flask là một khung công tác và có chức năng giúp bạn tạo một máy chủ gỡ lỗi. [Máy chủ gỡ lỗi có thể sử dụng nhiều luồng hoặc quy trình] (http://flask.pocoo.org/docs/api/#flask.Flask.run). _ "Tôi muốn khi mỗi khách hàng yêu cầu máy chủ, nó luôn luôn xuất" yêu cầu "trên bàn điều khiển ngay lập tức .... nhưng nó vẫn xuất hiện đồng bộ" _ đầu ra chính xác bạn đang nhận được là gì? –

Trả lời

0

This snippet là điểm khởi đầu tốt.

Bạn cũng nên xem xét Celery hoặc RQ, chúng là điều phù hợp để sử dụng cho các dự án lớn hơn, quan trọng hơn là chúng không phải là Bình cụ thể.

Chúng cũng có tích hợp Flask, Flask-CeleryFlask-RQ.

+0

Từ trang Flask-Celery: «TỪ CELLERY 3.0 THƯ VIỆN NÀY KHÔNG CẦN THIẾT LỚN, CÀI ĐẶT BẠN NÊN SỬ DỤNG API CẤP HÀNG TIÊU CHUẨN». Ngoài ra, bạn có thể kiểm tra [bài đăng này] (http://blog.miguelgrinberg.com/post/using-celery-with-flask) để biết chi tiết với Flask và Celery. –

1

Tôi tin rằng bạn đang hỏi về điều gì đó gọi là "phát trực tuyến". Đối với Flask, điều này có thể được thực hiện bằng các chức năng của máy phát và từ khóa yield.

Phát trực tuyến được trình bày chi tiết hơn trong tài liệu chính thức của Flask, có giao diện here.

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