2016-06-07 5 views
1

Ich spiele nur mit Multi-Threading, aber ich kann es nicht funktionieren. Ich habe mir andere Fragen angeschaut, aber keine hilft mir wirklich. Hier ist mein Code so weit:Wie funktioniert Multi-Threading in Python 3.4?

import threading, time 

def hello(): 
    for i in range(1,5): 
     time.sleep(1) 
     print("Hello") 

def world(): 
    for i in range(1,5): 
     time.sleep(1) 
     print("World") 

newthread = threading.Thread(hello()) 
newthread.daemon = True 
newthread.start() 
otherthread = threading.Thread(world()) 
otherthread.daemon = True 
otherthread.start() 
print("end") 

erwarte ich etwas zu bekommen wie:

Hello 
World 
Hello 
World 
Hello 
World 
Hello 
World 
end 

Aber stattdessen erhalte ich:

Hello 
Hello 
Hello 
Hello 
World 
World 
World 
World 
end 

Antwort

1

Sie wollen etwas wie folgt aus:

import threading, time 

def hello(): 
    for i in range(1,5): 
     time.sleep(1) 
     print("Hello") 

def world(): 
    for i in range(1,5): 
     time.sleep(1) 
     print("World") 

newthread = threading.Thread(target=hello) 
newthread.start() 
otherthread = threading.Thread(target=world) 
otherthread.start() 

# Just for clarity 
newthread.join() 
otherthread.join() 

print("end") 

Die den Hauptthread schließt sich sagen, auf den anderen Threads zu warten, bevor verlassen. Wenn Sie möchten, dass der Hauptthread beendet wird, ohne zu warten, setzen Sie demon=True und treten Sie nicht bei. Die Ausgabe könnte Sie ein wenig überraschen, es ist nicht so sauber wie Sie vielleicht erwarten. Zum Beispiel habe ich diese Ausgabe:

HelloWorld 

World 
Hello 
World 
Hello 
WorldHello 
+0

Danke für die Antwort, funktionierte perfekt, und ich fügte eine kleine Verzögerung zwischen den Fäden beginnen die Ausgabe richtig zu machen. :) –

2
threading.Thread(hello()) 

Sie die Funktion aufgerufen hello und verabschiedete die Ergebnis zu Thread, so dass es ausgeführt wurde, bevor das Thread-Objekt überhaupt existierte. Übergeben Sie die Ebene Funktionsobjekt:

threading.Thread(target=hello) 

Nun ist die Thread wird für die Ausführung der Funktion verantwortlich.

+0

Nach dem Entfernen des Brackets, erhalte ich jetzt diesen Fehler: newthread = threading.Thread (hallo, None) AssertionError: Gruppe Argument muss keine sein, jetzt –

+0

es sein sollte 'threading.Thread (target = hallo)' – cdonts

+0

füge 'target = hallo' als Parameter hinzu. Dies sagt ihm, die Funktion auszuführen. Fügen Sie auch 'args = (arg1, arg2, arg3)' für Parameter hinzu. – Goodies