2017-05-30 3 views
0
arbeiten

Ich folge Buckys Python tutorial und in seinem Video von Threading, bekam er diesen Ausgang (nicht genau):Python Threading funktioniert nicht wie es soll

Send out messages 
Send out messages 
Send out messages 
Receive messages 
Send out messages 
Receive messages 
Send out messages 
Receive messages 
Send out messages 
Receive messages 
Send out messages 
Receive messages 
Receive messages 
Receive messages 

aber wenn ich einen ähnlichen Code versucht, das Schreiben ich habe diese Ausgabe bekam:

Receiving messages... 
Receiving messages... 
Receiving messages... 
Receiving messages... 
Receiving messages... 
Receiving messages... 
Receiving messages... 
Receiving messages... 
Receiving messages... 
Receiving messages... 
Sending messages... 
Sending messages... 
Sending messages... 
Sending messages... 
Sending messages... 
Sending messages... 
Sending messages... 
Sending messages... 
Sending messages... 
Sending messages... 

Hier ist mein Code:

# threading 

import threading 

class Messenger(threading.Thread): 
    def run(self): 
     for _ in range(10): # '_' is used when you want to run a for loop but don't care about the varialble 
      print(threading.currentThread().getName()) 

x = Messenger(name='Sending messages...') 
y = Messenger(name='Receiving messages...') 

x.start() 
y.start() 

So gibt es etwas wron g mit meinem Code oder was ist hier falsch und warum meine Ausgabe unterscheidet sich von Buckys Ausgabe?

+0

Ich denke, das ist wegen Gil (globale Interpreter Sperre) -Eigenschaft von Python, dh es wird immer nur ein Thread zu einer Zeit https://docs.python.org/2/glossary.html#term-global-interpreter ausführen -lock –

+2

Laufen es verschiedene Zeiten, bekomme ich beide Arten von Ausgabe. Es hängt hauptsächlich davon ab, wann das Betriebssystem Ihren Threads Zeit zuweist. Sie können ein wenig "Schlaf" hinzufügen, um zu sehen, dass es langsamer geschieht - und Sie werden feststellen, dass die Reihenfolge, in der jeder Ihrer Threads ausgeführt wird, nicht garantiert ist. Das ist der Sinn der Verwendung: Sie laufen unabhängig voneinander. Wenn die Reihenfolge der Ausführung für Sie wichtig ist, verwenden Sie keine Threads oder verwenden Sie eine Art von Synchronisation. –

+0

@ThierryLathuille Ich habe den Code 9-10 Mal getestet und jedes Mal bekomme ich die gleiche Ausgabe. Ich weiß, warum ich Threading verwende und deshalb verwende ich es. Was denkst du über den Gil-Punkt, den Akhilviswam oben gegeben hat? Wie kann ich es deaktivieren? –

Antwort

0

Reihenfolge der Ausgabe ist nicht garantiert, wenn Sie Threads verwenden. Die Reihenfolge, in der die Threads ausgeführt werden, hängt von Ihrem Betriebssystem ab. Ich habe eine völlig andere Ausgabe auf meinem System.