Rhythmbox プラグインを作成し、JSON を非同期でダウンロードするコードを追加しようとしています。コールバックはdo_activate
関数に登録されます:
def do_activate(self):
shell = self.object
sp = shell.props.shell_player
self.db = shell.get_property('db')
self.qm = RB.RhythmDBQueryModel.new_empty(self.db)
self.pec_id = sp.connect('playing-song-changed', self.playing_entry_changed)
self.pc_id = sp.connect('playing-changed', self.playing_changed)
self.sc_id = sp.connect('playing-source-changed', self.source_changed)
self.current_entry = None
...
playing_changed
がトリガーされたときにコンテンツをダウンロードしようとしています。現在urllib2
、コンテンツを同期的にダウンロードするために使用されていますが、これにより、UI がしばらくブロックされる可能性があります。問題を解決するために Twisted を使用したいのですが、私が見たすべての例ではreactor.run()
、無期限にブロックする を使用しています。
私は Twisted にかなり慣れていないので、メイン スレッドをブロックせずにこのケースを非同期で処理する方法はあるのでしょうか?
完全なコードはこちら