Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么python gstreamer在没有";gobject.threads_init();在我剧本的顶端?_Python_Thread Safety_Gstreamer_Gobject - Fatal编程技术网

为什么python gstreamer在没有";gobject.threads_init();在我剧本的顶端?

为什么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

我已经编写了一个python脚本来使用gstreamer(pygst和gst模块)来计算replaygain标记,但由于各种gobject错误,它崩溃了。我发现您可以通过在脚本顶部放置以下样板文件来解决此问题:

import gobject
gobject.threads_init()

我试过了,它成功了。有人能解释为什么这些行是必需的,为什么pygst本身不这样做吗?

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

也可从功能文档中获得:

threads_init()函数 初始化Python的使用 gobject模块中的线程。这 功能不同于 gtk.gdk.threads_init()函数如下 该函数还初始化gdk 线程


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

但是python gstreamer模块似乎无论如何都会尝试使用线程,当我不调用
threads\u init()
时发生的崩溃就证明了这一点。因此,如果它总是尝试使用线程,它不应该总是初始化它吗?或者更直截了当地说,为什么pygst不包含这行代码,这是它在不崩溃的情况下工作所必需的?我认为这不是pygst的工作,而是应用程序的工作。如果每个库/绑定都这样做,那么每次加载一个库/绑定时都会再次这样做。