同じアプリケーションで Twisted と GTK+ を使いたいです。私は gtk2reactor を使用しており、すべてのコードを適切に非ブロック化しており、一般的にはかなりうまく機能しています。
ただし、(HTTP) ダウンロードを実行すると、GUI が応答しなくなり、遅延が発生します。それはあたかも何かがねじれたブロックの中にあるかのようで (非常に短い時間の間)、reactor は GTK イベントを頻繁に処理しません。基本的に、私は使用しています:
factory = twc.HTTPDownloader(url, filename)
reactor.connectTCP(host, port, factory)
問題を示すための小さな PyGtk プログラムを次に示します。アニメーションを表示するダミーの進行状況バーしかありませんが、本格的なプログラムでも問題は顕著です。ダウンロードが実行されている限り、スクロールまたは GtkNotebook タブ間の切り替え時に顕著な遅延があります。
これは予想どおりですか、それとも何か間違っていますか? 以前に GTK + Twisted アプリケーションを実行したことがありますが、これに気づいたことはありませんでしたが、以前はより大きなファイル (〜 300 MB) を転送したこともありませんでした。もしかしたら、twisted が大きすぎるチャンク サイズを選択し、メイン ループに制御を戻す前に長時間 (~100 ミリ秒?) ビジーのままになるのでしょうか? 代わりに、GTK とツイスト ループに別のスレッドを使用する必要がありますか?