2011-09-15 10 views
2

高価な操作を実行しているときにPyGTKをブロックしない方法はありますか?私はスレッディングがうまくいくことは知っていますが、多くのコードと設定が必要です。PyGTK nonblocking

おかげで、

+0

貴重な操作の中でイベントループを手動で呼び出すことはできますか?残念なことに、私は正確な関数名を覚えていない、高価な操作のコードを変更する必要があり、とにかくそれが推奨されていないどこかを読んでいます。 –

+0

私はおそらく、その高価な操作が何であるかにかかっていると思います。ファイルオペレーションを除いて高価な操作をしているときはいつでも 'while gtk.events_pending()'アプローチを使います。その場合はGioの '* _async()'メソッドを使用します。 –

答えて

1

本当にpygtkではスレッディングは良い選択ではありません。ただ、実行して、高価なループ内のイベントのメインループをチェックし、それはその事やらせる:それは使用して、ステップ・バイ・ステップを実行できるように

while my_operation_running: 

    <my code> 

    while gtk.events_pending(): 
     gtk.main_iteration() 

をしたり、高価な操作を微調整

glib.idle_add(function) 

メインループに何かする必要がないたびに、関数は「関数」を呼び出します。関数がその進行状況を追跡し、各呼び出しで1回の反復しか行わないようにします。

0

スレッドを避けて、PyGTKではうまく動作しません。いくつかの選択肢:あなたは、ファイル記述子からの読み込みIO /ネットワーク操作について

  • 、 glib.io_add_watch()
  • が別のプロセスに業務を移動し、 はglib.spawn_asyncを使用して、それとの通信を使用します()

Twistedは、完全にノンブロッキングであり、PyGTKメインループとうまく統合されたネットワーキングのための素晴らしいライブラリです。