11 Stimmen

Warum stürzt python gstreamer ohne "gobject.threads_init()" am Anfang meines Skripts ab?

Ich habe ein Python-Skript geschrieben, um gstreamer (pygst und gst-Module) zu verwenden, um Replaygain-Tags zu berechnen, und es war Absturz inkonsistent mit verschiedenen gobject Fehler. Ich habe irgendwo gefunden, dass man dies beheben kann, indem man die folgende Boilerplate an den Anfang des Skripts setzt:

import gobject
gobject.threads_init()

Ich habe es ausprobiert, und es hat funktioniert. Kann jemand erklären, warum diese Zeilen notwendig sind und warum pygst dies nicht selbst tut?

14voto

pyfunc Punkte 63257

Denn Sie können gobject auch in einer Umgebung ohne Threading verwenden. Dies ist nicht ungewöhnlich. Wenn Sie gobject in einer Threading-Umgebung verwenden, müssen Sie es explizit initialisieren, indem Sie gobject.threads_init() aufrufen. Dadurch wird auch sichergestellt, dass die GIL freigegeben wird, wenn die "C"-Funktionen aufgerufen werden.

Auch aus dem Funktionsdokument :

Die Funktion threads_init() initialisiert die Verwendung von Python Threading in dem Modul gobject. Diese Funktion ist anders als die gtk.gdk.threads_init() Funktion, da diese Funktion initialisiert auch die gdk Threads initialisiert.

Im Grunde genommen teilen Sie dem gobject-Modul ausdrücklich mit, dass Sie Threading verwenden werden, und initialisieren es entsprechend.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X