2009-06-14 6 views
9

Ich bin neugierig, wie die Global Interpreter Lock in Python tatsächlich funktioniert. Wenn ich eine C++ - Anwendung starte, werden vier separate Instanzen eines Python-Skripts parallel auf separaten Kernen ausgeführt, oder geht die GIL noch tiefer als nur der einzelne Prozess, der gestartet wurde, und steuert alle Python-Prozesse unabhängig vom Prozess, der sie hervorgebracht hat ?Führt das Ausführen separater Python-Prozesse die GIL aus?

Antwort

20

Die GIL betrifft nur Threads innerhalb eines einzelnen Prozesses. Das Modul multiprocessing ist in der Tat eine Alternative zu threading, mit der Python-Programme mehrere Kerne verwenden können & c. In Ihrem Szenario können Sie problemlos auch mehrere Kerne verwenden.

+1

Sie helfen mir sicher heute viel. Vielen Dank! – whatWhat

+0

Sie sind herzlich willkommen! –

+3

Eine "Plain Old Unix Pipeline" von Python-Anwendungen ist oft ein besseres Design als mehrere Threads. Eine Pipeline von Prozessen vermeidet alle GIL-Probleme. Es vermeidet auch mögliche Thread-Sicherheitsprobleme in einer Bibliothek, die Sie gerade verwenden. Es ist einfach, mit der Shell zu erstellen. Das Betriebssystem handhabt die Synchronisation für Sie - Sie lesen gerade von sys.stdin und schreiben in sys.stdout. –

1

Wie Alex Martelli darauf hinweist, dass Sie die GIL tatsächlich umgehen können, indem Sie mehrere Prozesse ausführen, möchte ich nur hinzufügen und darauf hinweisen, dass die GIL eine Einschränkung der Implementierung (CPython) und nicht von Python im Allgemeinen ist Implementiere Python ohne diese Einschränkung. Stackless Python kommt in den Sinn.

+0

Dies ist ein häufiges Missverständnis über Stackless. Stackless hilft nicht dabei, mehrere Kerne zu nutzen. Siehe http://www.stackless.com/pipermail/stackless/2007-August/001963.html –

Verwandte Themen