10 ~ 25 ミリ秒ごとに到着するパケットを分析する Tkinter/ttk アプリがあります。現在の実装では、ソケットが読み取られるたびに 30 個の StringVars を更新するスレッドを使用し、update_idletasks() を呼び出して対応するエントリ ウィジェットを更新します。アプリが起動してから 30 分も経たないうちにクラッシュします。
検索の結果、Tk は実際にはスレッドセーフではないことがわかりました。主な選択肢は 2 つあります。
スレッド + キューを使用します。
関数 + .after(1, 関数) を使用します。
UI は、更新を開始/停止し、表示用の Entry ウィジェットを提供するだけです。
システムでの主な待機はソケットの読み取りで、これには予想されるパケット レートの 2 倍のタイムアウトがあります (したがって、永久にブロックすることはできません)。
この場合、アプローチ 1 と 2 のどちらを選びますか?
私はその単純さのために#2に傾いていますが、その道に沿って待っているTkの落とし穴があるかどうかはわかりません. コミュニティの知恵を待っている間、おそらく両方を試してみます.