Beim Durcharbeiten eines Python-Lern-Buches bin ich beim Thema Multithreading angekommen und musste eine erschreckende Feststellung machen: Kann es sein, dass Python nicht auf mehreren Prozessorkernen arbeiten kann?
Ich habe das Testprogramm aus dem Buch:
Code: Alles auswählen
import threading
class PrimzahlThread(threading.Thread):
def __init__(self, zahl):
threading.Thread.__init__(self)
self.Zahl = zahl
def run(self):
i = 2
while i*i < self.Zahl:
if self.Zahl % i == 0:
print "%d ist nicht prim, da %d = %d * %d" % (
self.Zahl, self.Zahl, i, self.Zahl / i)
return
i += 1
print "%d ist prim" % self.Zahl
meine_threads = []
while 1:
eingabe = raw_input("> ")
if eingabe == "ende":
break
thread = PrimzahlThread(long(eingabe))
meine_threads.append(thread)
thread.start()
for t in meine_threads:
t.join()
Dabei kann man Zahlen eingeben und es wird parallel geprüft, obs eine Primzahl ist.
Das ganze läuft auf einem Dualcore Prozessor unter WinXP Pro.
Gebe ich nun zwei große Zahlen ein (z.B. 2x 4503599627370449), dann würde ich auf beiden Kernen 100% Auslastung erwarten. Dem ist aber nicht so: Ich habe auf beiden Kernen nur ca. 50%!
Also meine Frage: Kann das Python 2.5 nicht? Wie sieht's mit Python 3.0 aus? Wird es da gehen?
Vielen Dank für Eure Antworten!