在后台线程 python/pygtk 中运行计算

2024-01-02

有没有一种方法可以在后台运行 python 线程,而无需在耗时的指令期间锁定 python 的其余部分?

我正在尝试在 python (pygtk) 应用程序的后台线程中进行耗时的计算。我了解线程是如何工作的。问题是,每次我在任何线程中运行一个昂贵的操作(例如:PIL 的 image.load() 用于大图像),它都会阻塞所有 python 线程,直到操作完成,即使它是在单独的线程中。

那么,有没有一种方法可以在后台运行 python 线程而不锁定 python 的其余部分? (我不在乎他们花了多长时间,只要他们不锁定我的 GUI。我只是不能让我的 GUI 一次无响应几秒钟)。使用 sleep 语句不起作用,因为我的问题是需要很长时间的单个命令(例如 image.load())。


既然你使用的是 pygtk,你打电话了吗?threads_init()?

对于较新的版本:

>>> from gi.repository import GObject
>>> GObject.threads_init()

对于年纪较大的人来说:

>>> import gobject
>>> gobject.threads_init()

还要确保您没有从线程中调用任何 GUI 方法,否则您的应用程序将以奇怪的方式中断。解决这个问题的一个简单方法是使用GObject.idle_add:

idle_add(可调用,user_data=None,priority=None) -> 源id 可调用接收(user_data)

添加一个可调用对象,以便在没有更高优先级时调用 事件等待默认主循环。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在后台线程 python/pygtk 中运行计算 的相关文章

随机推荐