【发布时间】:2011-09-03 13:41:49
【问题描述】:
我正在使用 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 信号。
【问题讨论】:
标签: python thread-safety pyqt pyside