2011-09-03 12 views
5

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.

Respuesta

4

Recomendaría leer this post para un enfoque general de los hilos de interfaz con una GUI PyQt. La publicación trata sobre un hilo que hace E/S de socket, pero esto realmente es aplicable a cualquier hilo. Específicamente, los subprocesos de la interfaz de hardware generalmente también usan E/S, por lo que puede ser una buena opción.

El enfoque discutido es muy genérico, usando Queue.Queue, y puede parecer una exageración para tareas simples (pero solo quiero llamar a la función "esa" en un hilo). Sin embargo, una vez que su aplicación no sea trivial, la apreciará, ya que evita cualquier problema de sincronización de subprocesos y es muy escalable. Personalmente lo utilicé para implementar GUI complejas de PyQt con hilos secundarios haciendo todo tipo de cosas.

Cuestiones relacionadas