11

我编写了一个 python 脚本来使用 gstreamer(pygst 和 gst 模块)来计算 replaygain 标签,并且它与各种 gobject 错误不一致地崩溃。我在某个地方找到了可以通过将以下样板放在脚本顶部来解决此问题的地方:

import gobject
gobject.threads_init()

我试过了,它奏效了。谁能解释为什么这些行是必要的,以及为什么 pygst 自己不这样做?

4

1 回答 1

14

因为,您可以在非线程环境中使用 gobject。这并不罕见。在线程环境中使用 gobject 时,需要通过调用 gobject.threads_init() 显式初始化。这也将确保在调用“C”函数时释放 GIL。

同样来自功能文档:

threads_init() 函数初始化 gobject 模块中 Python 线程的使用。该函数不同于 gtk.gdk.threads_init() 函数,因为该函数还初始化 gdk 线程。

基本上,您明确地告诉 gobject 模块您将使用线程并相应地对其进行初始化。

于 2010-09-23T23:03:23.413 回答