为什么python gstreamer在没有";gobject.threads_init();在我剧本的顶端?
我已经编写了一个python脚本来使用gstreamer(pygst和gst模块)来计算replaygain标记,但由于各种gobject错误,它崩溃了。我发现您可以通过在脚本顶部放置以下样板文件来解决此问题:为什么python gstreamer在没有";gobject.threads_init();在我剧本的顶端?,python,thread-safety,gstreamer,gobject,Python,Thread Safety,Gstreamer,Gobject,我已经编写了一个python脚本来使用gstreamer(pygst和gst模块)来计算replaygain标记,但由于各种gobject错误,它崩溃了。我发现您可以通过在脚本顶部放置以下样板文件来解决此问题: import gobject gobject.threads_init() 我试过了,它成功了。有人能解释为什么这些行是必需的,为什么pygst本身不这样做吗?因为,您可以在非线程环境中使用gobject。这并不罕见。 在线程环境中使用gobject时,需要通过调用gobject.th
import gobject
gobject.threads_init()
我试过了,它成功了。有人能解释为什么这些行是必需的,为什么pygst本身不这样做吗?因为,您可以在非线程环境中使用gobject。这并不罕见。 在线程环境中使用gobject时,需要通过调用gobject.threads_init()显式初始化。这也将确保调用“C”函数时,GIL被释放
基本上,您明确地告诉gobject模块您将使用线程并相应地初始化它。但是python gstreamer模块似乎无论如何都会尝试使用线程,当我不调用
threads\u init()
时发生的崩溃就证明了这一点。因此,如果它总是尝试使用线程,它不应该总是初始化它吗?或者更直截了当地说,为什么pygst不包含这行代码,这是它在不崩溃的情况下工作所必需的?我认为这不是pygst的工作,而是应用程序的工作。如果每个库/绑定都这样做,那么每次加载一个库/绑定时都会再次这样做。