Reputation: 6206
Flask is a single thread web server. But I want to make it won't block when handle some time consuming request.
For example:
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)
I want when every client request to server, it always output "request" on console immediately. I have try gunicorn
and run with gunicorn -k gevent -w 4 a:app
but it still appears synchronous.
Upvotes: 10
Views: 17084
Reputation: 67502
I believe you are asking about something called "streaming". For Flask this can be accomplished using generator functions and the yield
keyword.
Streaming is covered in more detail in the official Flask documentation, have a look here.
Upvotes: 1
Reputation: 8244
This snippet is a good starting point.
You also should look into Celery or RQ, they're the right thing to use for larger projects, more importantly they're not Flask-specific.
They also have Flask integration each, Flask-Celery and Flask-RQ.
Upvotes: 1