这是烧瓶(1.1.1)的玩具代码:
import eventlet
eventlet.monkey_patch()
from flask import Flask
import time
from flask_socketio import SocketIO
app = Flask(__name__)
socketio = SocketIO(async_mode='eventlet')
socketio.init_app(app)
@app.route('/dummy_fun1')
def dummy_fun1():
print("this is dummy_fun1")
socketio.sleep(10)
return 'dummy_fun1'
@app.route('/dummy_fun2')
def dummy_fun2():
print("this is dummy_fun2")
socketio.sleep(8)
return 'dummy_fun2'
if __name__ == "__main__":
socketio.run(app, host='0.0.0.0', port=5566, debug=False)
启动烧瓶,然后尝试通过2次不同的chrome访问/ dummy_fun1。
我发现/ dummy_fun1的第一次访问阻止了/ dummy_fun1的第二次访问。由于threaded = True,我希望flask可以并行服务相同URL的这两次访问,但事实并非如此。 虽然flask确实可以并行访问2个不同URL的访问,但在这种情况下/ dummy_fun1不会以任何方式阻止/ dummy_fun2。
仍然在学习Flask,不太了解Flask为什么如此行事,也许与Flask无关,非常感谢任何建议可以帮助我理解底层逻辑。
更新:
请保持清晰,因此摆脱python线程,并利用flask_socketio运行带有eventlet的flask应用程序并将其设置为asnyc模式,但它仍然阻止对一个URL的相同访问,并且在不同的URL之间没有阻止