Выдать g_signal из потока в main в Python
Таким образом, я нашел эту суть о том, как создать систему "пула потоков", и моя проблема заключается в том, что когда выполненная функция завершает работу в потоке, сигнал "выполнено" должен исходить из (или в) основного потока. Решение, представленное в сущности, состояло в том, чтобы переписать 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), которые не могут обновить пользовательский интерфейс, поэтому не решают мою проблему. Есть идеи о том, что происходит?
Моя версия его сути может быть найдена здесь