Безопасные и ленивые вызовы метода в PySide/PyQt

я использую PySide, чтобы управлять некоторыми аппаратными средствами и выполнить некоторые относительно простые операции в зависимости от (например). нажатия кнопок в интерфейсе. Код для выполнения каждой из этих частей аппаратных средств находится в другом потоке. Для удобства ко всем тем драйверам оборудования я добавил дженерик сигнал invoke_method, такой, что компонент UI может использовать

my_driver.invoke_method.emit('method_name', [arg, ...], {kwarg, ...})

, Очевидно, это получает доступ к атрибуту сигнала в том другом потоке непосредственно...., но я не уверен, находится ли это обязательно хорошо в мире GIL.

, Если это - действительно слишком ленивое решение - там какие-либо другие большие альтернативы для вызова произвольных методов в произвольных потоках, не имея необходимость иметь определенный для операции сигнал в UI, подключенном к другому сигналу в драйвере?

я мог предположить вместо этого использовать сигнал в каждом бите кода UI, который получил доступ к другой шт. аппаратных средств - что-то как do_invocation_driver_1 и do_invocation_driver_2, и соедините тех, которые к сигнал invoke_method соответствующего драйвера.

5
задан marqueed 3 September 2011 в 02:09
поделиться