所以我发现这个gist关于如何创建一个"线程池"系统和我的问题是:当执行的功能在线程中完成时,"完成"信号必须从主线程发出(或到主线程)。要点上提出的解决方案是使用GObject.emit
覆盖GObject.idle_add(GObject.GObject.emit, self, *args)
函数,该函数在gist示例中起作用,但是对我来说不起作用。我创建了一个稍微修改过的代码版本,它可以满足我的需要,除了正确发送信号之外。
class _IdleObject(GObject.GObject):
""" Override GObject.GObject to always emit signals in the main thread by
emmitting on an idle handler """
@trace
def __init__(self):
GObject.GObject.__init__(self)
@trace
def emit(self, *args):
GLib.idle_add(GObject.GObject.emit, self, *args)
总之,信号不是在辅助线程上发出或发出的(当发出功能覆盖被注释掉时),这不能更新UI,因此无法解决我的问题。关于什么事情的任何想法?
我可以找到他的要点here