高価な操作を実行しているときにPyGTKをブロックしない方法はありますか?私はスレッディングがうまくいくことは知っていますが、多くのコードと設定が必要です。PyGTK nonblocking
おかげで、
高価な操作を実行しているときにPyGTKをブロックしない方法はありますか?私はスレッディングがうまくいくことは知っていますが、多くのコードと設定が必要です。PyGTK nonblocking
おかげで、
はPyGTKの中にバックグラウンドスレッドの設定がnot all that difficultです。
本当にpygtkではスレッディングは良い選択ではありません。ただ、実行して、高価なループ内のイベントのメインループをチェックし、それはその事やらせる:それは使用して、ステップ・バイ・ステップを実行できるように
while my_operation_running:
<my code>
while gtk.events_pending():
gtk.main_iteration()
をしたり、高価な操作を微調整
glib.idle_add(function)
メインループに何かする必要がないたびに、関数は「関数」を呼び出します。関数がその進行状況を追跡し、各呼び出しで1回の反復しか行わないようにします。
スレッドを避けて、PyGTKではうまく動作しません。いくつかの選択肢:あなたは、ファイル記述子からの読み込みIO /ネットワーク操作について
Twistedは、完全にノンブロッキングであり、PyGTKメインループとうまく統合されたネットワーキングのための素晴らしいライブラリです。
貴重な操作の中でイベントループを手動で呼び出すことはできますか?残念なことに、私は正確な関数名を覚えていない、高価な操作のコードを変更する必要があり、とにかくそれが推奨されていないどこかを読んでいます。 –
私はおそらく、その高価な操作が何であるかにかかっていると思います。ファイルオペレーションを除いて高価な操作をしているときはいつでも 'while gtk.events_pending()'アプローチを使います。その場合はGioの '* _async()'メソッドを使用します。 –