gpt4 book ai didi

python - PySide/PyQt 中的安全和惰性方法调用

转载 作者:太空狗 更新时间:2023-10-30 01:17:10 25 4
gpt4 key购买 nike

我正在使用 PySide 来管理一些硬件并根据(例如)界面中的按钮点击执行一些相对简单的操作。运行这些硬件中的每一个的代码驻留在另一个线程中。为了方便起见,我向所有这些硬件驱动程序添加了一个通用的 invoke_method 信号,以便 UI 组件可以使用

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

显然,这会直接访问另一个线程中的信号属性……但我不确定这在 GIL 世界中是否一定可行。

如果这确实是一个太懒惰的解决方案 - 是否有任何其他好的替代方案可以在任意线程中调用任意方法,而不必在 UI 中将特定于操作的信号连接到驱动程序中的另一个信号?

我可以想象在访问不同硬件的每一位 UI 代码中使用一个信号——比如 do_invocation_driver_1do_invocation_driver_2 并将它们连接到 invoke_method 相应驱动程序的信号。

最佳答案

我建议阅读 this post了解使用 PyQt GUI 连接线程的一般方法。该帖子讨论了执行套接字 I/O 的线程,但这实际上适用于任何线程。具体来说,硬件接口(interface)线程通常也使用 I/O,因此这可能是一个不错的选择。

所讨论的方法非常通用,使用 Queue.Queue,对于简单的任务来说似乎有点矫枉过正(但我只想在线程中调用“那个”函数)。然而,一旦您的应用程序变得非常重要,您就会欣赏它,因为它避免了任何线程同步问题,并且非常可扩展。我个人用它来实现复杂的 PyQt GUI,并使用侧线程执行各种操作。

关于python - PySide/PyQt 中的安全和惰性方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7290714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com