Python 使用flask socketio,如何在一个函数中异步发出多条消息?
我正在使用Flask socketio模块构建一个Flask web应用程序来实现websockets。它通常工作正常,但当我尝试在for循环中从服务器向客户机发送多条消息时,所有消息实际上都会一次发送——也就是说,一旦所有消息都创建好了 我了解到,解决方案可能是使用能够异步任务处理的eventlet服务器: “最简单的部署策略是安装eventlet或gevent,并通过调用socketio.run(app)启动web服务器,如上面的示例所示。这将在eventlet或gevent web服务器上运行应用程序,以安装的为准。”(摘自Flask socketio文档) 遗憾的是,这并不能解决问题。我以前从未使用过WebSocket,所以我有点迷路了。以下是我的代码的简化版本:Python 使用flask socketio,如何在一个函数中异步发出多条消息?,python,flask,websocket,backend,Python,Flask,Websocket,Backend,我正在使用Flask socketio模块构建一个Flask web应用程序来实现websockets。它通常工作正常,但当我尝试在for循环中从服务器向客户机发送多条消息时,所有消息实际上都会一次发送——也就是说,一旦所有消息都创建好了 我了解到,解决方案可能是使用能够异步任务处理的eventlet服务器: “最简单的部署策略是安装eventlet或gevent,并通过调用socketio.run(app)启动web服务器,如上面的示例所示。这将在eventlet或gevent web服务器上
from flask import Flask
from flask_socketio import SocketIO, emit
import eventlet
app = Flask(__name__)
socketio = SocketIO(app)
@socketio.on("connect")
def handle_connect():
print("server and client connected")
@socketio.on("text")
def text(question):
for _ in range(3):
answer = my_module.generate_answer(question)
emit("message", {"msg": answer})
socketio.run(app)
假设我的_module.generate_answer()根据通过websocket发送的一些用户输入生成一个句子。每一代需要5-10秒。这也是我希望答案生成后通过WebSocket发送的原因——我的前端可能已经在等待下一个答案时显示了第一个答案
非常感谢你的帮助 您需要在文件的最顶端安装monkey patch 您的导入语句应该如下所示:
import eventlet
eventlet.monkey_patch()
from flask import Flask
from flask_socketio import SocketIO, emit