2009-12-16 3 views
9

Ich bin neu in Python und scheint, dass das Multiprocessing und Threads-Modul nicht sehr interessant sind und unter den gleichen Problemen wie Threads in Perl leiden. Gibt es einen technischen Grund, warum der Interpreter keine Lightweight-Threads wie Posix-Threads verwenden kann, um eine effiziente Thread-Implementierung zu erstellen, die wirklich auf mehreren Kernen ausgeführt wird?Warum gibt es keine echten Lightweight-Threads für Python?

Antwort

22

Es ist mit POSIX-Threads. Das Problem ist die GIL.

Beachten Sie, dass die GIL nicht Teil der Python-Spezifikation ist - sie ist Teil der CPython-Referenzimplementierung. Jython zum Beispiel leidet nicht an diesem Problem.

Das sagte, schaute in Stackless?

+0

Auch die GIL macht Cpython schneller - Viele versucht, aber das Entfernen scheint die Leistung zu verschlechtern. – nosklo

+6

nosklo: Es kann genauer gesagt sein, dass die GIL CPython mit einem einzigen Thread schneller macht. Modifikationen, die es entfernten, schafften es, multi-threaded Code paralleler Algorithmen schneller laufen zu lassen als die äquivalenten single-threaded Implementierungen, aber die Geschwindigkeit von single-threaded Code wurde erheblich reduziert –

+0

Mit Sicherheit angesichts der Wichtigkeit von Multicore-Chips und Skalierbarkeit. – piotr

0

Piotr,

Sie vielleicht einen Blick auf stackless nehmen wollen (http://www.stackless.com/), die eine modifizierte Version von Python ist leicht Tasklets in Message Passing (erlang-Stil) Art und Weise ausgeführt werden.

Ich bin mir nicht sicher, ob Sie nach einer Multicore-Lösung suchen, aber stapell herumzustochern könnte Ihnen das geben, wonach Sie suchen.

Ben

+0

Werden mehrere CPUs verwendet? – piotr

+0

Nicht an sich - Sie könnten dies als verdreht betrachten. Wenn Sie jedoch nach einer echten Multicore-Skalierbarkeit suchen (ohne die Anwendung zu verteilen), ist Python möglicherweise nicht die beste Wahl - Sie sollten vielleicht Erlang in Betracht ziehen. –

+0

Ich habe die Überlegungen zur Prozessskalierbarkeit gelesen. Sie sagen also, wenn Sie wirklich weiter als die lokalen Kerne skalieren wollen, brauchen Sie sowieso mehrere Prozesse und somit ist die GIL keine große Sache. Danke für den Erlang Hinweis, scheint, dass Erlang es auch per Prozess macht. – piotr