11

gstreamer(pygstおよびgstモジュール)を使用してリプレイゲインタグを計算するPythonスクリプトを作成しましたが、さまざまな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 に答える