के साथ समवर्ती अनुरोधों का जवाब देने के लिए मैं एक न्यूनतम फ्लास्क एप्लिकेशन सेट अप करने का प्रयास करता हूं जो eventlet का उपयोग करता है जो तुरंत एक दूसरे के बाद एक अनुरोध को अवरुद्ध करने और प्रतिक्रिया देने के बजाय समवर्ती अनुरोधों का जवाब देने के लिए करता है (मानक फ्लास्क डीबगिंग वेबसर्वर करता है)।फ्लास्क और इवेंटलेट
आवश्यक:
pip install Flask
pip install eventlet
मैं अब तक इंटरनेट पर क्या मिला द्वारा मेरी समझ से, यह इस तरह काम करना चाहिए:
# activate eventlet
import eventlet
eventlet.monkey_patch()
from flask import Flask
import datetime
from time import sleep
# create a new Flask application
app = Flask(__name__)
# a short running task that returns immediately
@app.route('/shortTask')
def short_running_task():
start = datetime.datetime.now()
return 'Started at {0}, returned at {1}'.format(start, datetime.datetime.now())
# a long running tasks that returns after 30s
@app.route('/longTask')
def long_running_task():
start = datetime.datetime.now()
sleep(30)
return 'Started at {0}, returned at {1}'.format(start, datetime.datetime.now())
# run the webserver
if __name__ == '__main__':
app.run(debug=True)
जब इस फाइल चल रहा है, तो एक webbrowser में http://localhost:5000/longTask
खोलने टैब और जब भी यह http://localhost:5000/shortTask
के साथ एक और टैब खोलने की प्रक्रिया कर रहा है, तो मुझे उम्मीद है कि दूसरा टैब तुरंत वापस लौटने की उम्मीद करेगा जबकि पहला टैब अभी भी लोड हो रहा है। हालांकि, मानक Werkzeug सर्वर पर इसे चलाने के समान, दूसरा टैब केवल 30 के बाद समाप्त होने के बाद ही लौटाता है।
यहां क्या गलत है? वैसे, क्या यह आमतौर पर फ्लास्क के लिए "उत्पादन तैयार वेबसर्वर" के रूप में जाना जाता है, यह देखते हुए कि केवल कुछ समवर्ती उपयोगकर्ताओं की अपेक्षा की जा सकती है (अधिकतम 5)?
वैसे, जब मैं वेबसर्वर चलाने के लिए the Flask-socketio library का उपयोग करता हूं, जो दस्तावेज़ीकरण के अनुसार स्वचालित रूप से इवेंटलेट चुनता है, तो यह अपेक्षा के अनुसार काम करता है। कुप्पी के socketio साथ
पूरा उदाहरण:
# activate eventlet
import eventlet
eventlet.monkey_patch()
from flask import Flask
from flask_socketio import SocketIO
import datetime
from time import sleep
# create a new Flask application
app = Flask(__name__)
# activate Flask-socketio
socketio = SocketIO(app)
# a short running task that returns immediately
@app.route('/shortTask')
def short_running_task():
start = datetime.datetime.now()
return 'Started at {0}, returned at {1}'.format(start, datetime.datetime.now())
# a long running tasks that returns after 30s
@app.route('/longTask')
def long_running_task():
start = datetime.datetime.now()
sleep(30)
return 'Started at {0}, returned at {1}'.format(start, datetime.datetime.now())
# run the webserver with socketio
if __name__ == '__main__':
socketio.run(app, debug=True)
बढ़िया! 'Wsgi.server' कमांड पर फ्लास्क ऐप ऑब्जेक्ट को पास करने के लिए इवेंटलेट डॉक्स में उदाहरण से मुझे स्पष्ट नहीं था, इसलिए यह फ्लास्क-आधारित उदाहरण बहुत उपयोगी था। – Dirk