我正在使用 PySide 来管理一些硬件并根据(例如)界面中的按钮单击执行一些相对简单的操作。运行这些硬件的代码驻留在另一个线程中。为方便起见,我向所有这些硬件驱动程序添加了一个通用invoke_method
信号,以便 UI 组件可以使用
my_driver.invoke_method.emit('method_name', [arg, ...], {kwarg, ...})
显然,这直接访问了另一个线程中的信号属性......但我不确定这在 GIL 世界中是否一定可以。
如果这确实是一个懒惰的解决方案 - 是否有任何其他很好的替代方法可以在任意线程中调用任意方法,而不必在 UI 中将特定于操作的信号连接到驱动程序中的另一个信号?
我可以想象在访问不同硬件的每一位 UI 代码中使用一个信号 - 类似于do_invocation_driver_1
anddo_invocation_driver_2
并将它们连接到invoke_method
相应驱动程序的信号。