Я использую PySide для управления некоторым оборудованием и выполнения некоторых относительно простых операций в зависимости от (например) нажатий кнопок в интерфейсе.Код для запуска каждого из этих аппаратных компонентов находится в другом потоке.Для удобства ко всем этим аппаратным драйверам я добавил общий сигнал invoke_method
, так что компонент пользовательского интерфейса может использовать
my_driver.invoke_method.emit('method_name', [arg, ...], {kwarg, ...})
Очевидно, что это напрямую обращается к атрибуту сигнала в этом другом потоке ...но я не уверен, что это нормально в мире GIL.
Если это действительно слишком ленивое решение - есть ли другие отличные альтернативы для вызова произвольных методов в произвольных потоках без необходимости иметь специфичный для операции сигнал в пользовательском интерфейсе, подключенный к другому сигналу в драйвере?
Я мог бы вместо этого использовать сигнал в каждом бите кода пользовательского интерфейса, который обращается к разным аппаратным средствам - что-то вроде do_invocation_driver_1
и do_invocation_driver_2
, и подключать их к сигналу invoke_method
соответствующего драйвера.