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?
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 –
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. –
@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? –