gpt4 book ai didi

python - 使用套接字时的 Flask Debug模式

转载 作者:行者123 更新时间:2023-11-28 17:36:18 25 4
gpt4 key购买 nike

我正在构建使用套接字 (flask socketio) 的 python Flask 应用程序。基本上,客户端会向服务器发送一些他想要执行的命令。服务器将执行命令并将套接字发送到客户端命令输出。

有接收用户请求的处理函数。此函数将执行命令并将大量套接字发送回客户端。还使用了 stdout 和 stderr 线程。

@socket.on ('run-code')
@authenticated_only
def socket_run_code_request (request):
# run command
# emit socket for each line of output

如果 flask 应用程序处于 Debug模式,函数内部发出的套接字将在函数结束之前到达客户端(这是可取的)。但是如果调试关闭,所有套接字都会以某种方式排队并在函数结束后发送。服务器没有实时响应,只是

点击执行 -> 稍等 -> 这是你的输出

代替:

点击执行 -> 这是一些输出 -> 这是另一行 -> ...

我已阅读 Flask 文档,但对调试 的描述是 following :

If you enable debug support the server will reload itself on code changes, and it will also provide you with a helpful debugger if things go wrong

有什么方法可以告诉 Flask 立即发送所有内容,或者有一些解决方法吗?可能与flask-socketio有关 flask 插件

非常感谢您的反馈:)

最佳答案

我的猜测是问题在于您没有对标准库进行猴子修补,因此您为支持异步进程监控而进行的所有这些调用都是阻塞的。在 Debug模式下,Flask-SocketIO 会进行猴子修补,因为 Flask 重新加载器没有它就无法工作。

要使用 monkey patch,只需在主 Python 脚本的最顶部添加以下内容:

from gevent import monkey
monkey.patch_all()

关于python - 使用套接字时的 Flask Debug模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30236854/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com