Итак, я нашел эту гисту о том, как создать систему «пула потоков», и моя проблема заключается в следующем: когда завершенная функция завершается в потоке, сигнал «выполнено» должен передаваться (или)основная нить.Решение, представленное в сущности, состояло в том, чтобы перезаписать функцию GObject.emit
, используя GObject.idle_add(GObject.GObject.emit, self, *args)
, что делает трюк в примере с сущностью, но загадочным образом не работает для меня.Я создал слегка модифицированную версию его кода, которая делает то, что мне нужно, кроме как правильно / вообще не излучать сигналы.
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)
Таким образом, сигналы либо не излучаются, либо излучаются во вторичных потоках (когдаперезаписана функция emit), которая не может обновить пользовательский интерфейс, поэтому не решает мою проблему.Любые идеи о том, что происходит?
Моя версия его сути может быть найдена здесь