Python multithreading zu langsam, Multiprozess -

Ich bin ein multiprocessing-Neuling,

Ich weiß etwas über threading, aber ich brauche zur Erhöhung der Geschwindigkeit der Berechnung, hoffentlich mit multiprocessing:

Beispiel Beschreibung: sendet string an einen thread, ändert string + benchmark-test,
schicken das Ergebnis zurück zum drucken.

from threading import Thread

class Alter(Thread):
    def __init__(self, word):
        Thread.__init__(self)
        self.word = word
        self.word2 = ''

    def run(self):
        # Alter string + test processing speed
        for i in range(80000):
            self.word2 = self.word2 + self.word

# Send a string to be altered
thread1 = Alter('foo')
thread2 = Alter('bar')
thread1.start()
thread2.start()

#wait for both to finish
while thread1.is_alive() == True: pass
while thread2.is_alive() == True: pass


print(thread1.word2)
print(thread2.word2)

Dies ist momentan dauert etwa 6 Sekunden, und ich muss es schneller gehen.

Ich habe auf der Suche in multiprocessing und kann nicht etwas finden, äquivalent zu dem obigen code. Ich denke, was ich am nach ist pooling aber Beispiele, die ich gefunden habe, wurden schwer zu verstehen. Ich möchte nutzen alle cores (8 Kerne) multiprocessing.cpu_count() aber ich habe nur Fetzen von nützlichen Informationen über multiprocessing und nicht genug, um das Duplikat des obigen code. Ob jemand kann mich in die richtige Richtung oder noch besser ein Beispiel geben, dass würde sehr geschätzt werden. Python 3 bitte

  • nicht besetzt-warten-thread zu vervollständigen. verwenden Sie Thread.join()!
  • warum nicht? Ich habe dies getan, in den meisten meiner Kodierung und wenn Sie einen guten Grund, werde ich ändern 🙂
  • nun, es ist mindestens so gut wie besetzt-warten-und wahrscheinlich macht Sie passiv warten, bis der thread beendet wird, ohne Essen, ohne mit der cpu (obwohl ich es nicht finden können im docs-ich würde Wetten cpython keine " busy-wait im Thread.join()).
  • **das kommt wohl auf die Plattform sowieso.
  • ok, das macht Sinn, ich denke, ich werde diese join () - moving forward
  • Besetzt-warten, wie das halten wird das GIL, und verhindern, dass Ihr worker-threads ausgeführt werden. Auch, wenn Sie nicht genug CPUs, dann eine CPU, die könnte in Ihrem worker-thread tun, nützliche Arbeit, im Umgang mit einem OS zu unterbrechen, oder sich mit einige andere Prozess statt, um Wärme zu erzeugen.

InformationsquelleAutor Rhys | 2012-01-08
Schreibe einen Kommentar