Estoy usando PySide para administrar algunos hardware y realizar algunas operaciones relativamente simples dependiendo de (por ejemplo) clic de botones en la interfaz. El código para ejecutar cada una de estas piezas de hardware reside en otro hilo. Para mayor comodidad, a todos los controladores de hardware que he añadido una señal genérica invoke_method
, de tal manera que un componente de interfaz de usuario puede utilizarInvocaciones de métodos seguros y perezosos en PySide/PyQt
my_driver.invoke_method.emit('method_name', [arg, ...], {kwarg, ...})
Obviamente, esto tiene acceso al atributo de señal en ese otro hilo directamente .... pero me No estoy seguro de si esto está necesariamente bien en un mundo GIL.
Si esta es una solución demasiado vaga, ¿hay alguna otra gran alternativa para invocar métodos arbitrarios en hilos arbitrarios sin tener que tener una señal específica de operación en la IU conectada a otra señal en el controlador?
que podía imaginar en lugar de utilizar una señal en cada bit de código de interfaz de usuario que accede a una pieza de hardware diferente - algo así como do_invocation_driver_1
y do_invocation_driver_2
y conectar a aquellos que la señal del controlador correspondiente invoke_method
.