Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用flask socketio,如何在一个函数中异步发出多条消息?_Python_Flask_Websocket_Backend - Fatal编程技术网

Python 使用flask socketio,如何在一个函数中异步发出多条消息?

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服务器上

我正在使用Flask socketio模块构建一个Flask web应用程序来实现websockets。它通常工作正常,但当我尝试在for循环中从服务器向客户机发送多条消息时,所有消息实际上都会一次发送——也就是说,一旦所有消息都创建好了

我了解到,解决方案可能是使用能够异步任务处理的eventlet服务器:

“最简单的部署策略是安装eventlet或gevent,并通过调用socketio.run(app)启动web服务器,如上面的示例所示。这将在eventlet或gevent web服务器上运行应用程序,以安装的为准。”(摘自Flask socketio文档)

遗憾的是,这并不能解决问题。我以前从未使用过WebSocket,所以我有点迷路了。以下是我的代码的简化版本:

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