簡體   English   中英

使用套接字時的Flask調試模式

[英]Flask debug mode when using sockets

我正在構建使用套接字(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應用程序處於調試模式 ,則函數內部發出的套接字將在函數結束前到達客戶端(這是可取的)。 但是如果關閉調試,所有套接字都會以某種方式排隊並在函數結束后發送。 沒有來自服務器的實時響應

點擊執行 - > 等一下 - > 這是你的輸出

代替:

點擊執行 - > 這里有點輸出 - > 這是另一行 - > ...

我已閱讀Flask文檔,但調試說明如下

如果啟用調試支持,服務器將在代碼更改時重新加載,如果出現問題,它還將為您提供有用的調試器

有沒有辦法告訴Flask馬上發送一切,或者一些想法如何解決這個問題? 它可能與燒瓶的燒瓶插入有關

非常感謝您的反饋:)

我的猜測是問題是你沒有修補標准庫,所以所有這些調用你支持監視異步進程的調用都是阻塞的。 在調試模式下,Flask-SocketIO會進行猴子修補,因為如果沒有它,Flask重新加載器就無法工作。

要修補補丁,只需在主Python腳本的最頂部添加以下內容:

from gevent import monkey
monkey.patch_all()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM