Выдать g_signal из потока в главное в Python - PullRequest
0 голосов
/ 27 мая 2018

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

Моя версия его сути может быть найдена здесь

...