我写了一个 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 很陌生,我想知道,有没有办法在不阻塞主线程的情况下异步处理这种情况?
完整代码在这里