Dies ist ein Code zum Testen Threading
:Python: Ausführungsreihenfolge in Threading
import threading
import time
episode = 0
lock = threading.Lock()
class Agent(threading.Thread):
def __init__(self, id):
threading.Thread.__init__(self)
self.id = id
def run(self):
global episode
while episode < 5:
with lock:
print(
"{} : episode will be changed {} -> {}".format(
self.id,
episode,
episode+1
)
)
episode += 1
print("{} : changed value -> {}".format(self.id, episode))
time.sleep(1)
if __name__ == "__main__":
agents = []
for i in range(3):
agents.append(Agent(i))
for agent in agents:
agent.start()
Ergebnis:
0 : episode will be changed 0 -> 1
0 : changed value -> 1
0 : episode will be changed 1 -> 2
0 : changed value -> 2
0 : episode will be changed 2 -> 3
0 : changed value -> 3
0 : episode will be changed 3 -> 4
0 : changed value -> 4
0 : episode will be changed 4 -> 5
0 : changed value -> 5
1 : episode will be changed 5 -> 6
1 : changed value -> 6
2 : episode will be changed 6 -> 7
2 : changed value -> 7
Dies ist eines der Ergebnisse, die ich erwartet hatte:
0 : episode will be changed 0 -> 1
0 : changed value -> 1
2 : episode will be changed 1 -> 2
2 : changed value -> 2
1 : episode will be changed 2 -> 3
1 : changed value -> 3
2 : episode will be changed 3 -> 4
2 : changed value -> 4
0 : episode will be changed 4 -> 5
0 : changed value -> 5
.
.
Ich kann nicht verstehen, warum Thread-ID = 0 fortlaufend an erster Stelle erscheinen ... Wie ich weiß, die Ausführungsreihenfolge von Thre Werbung ist zufällig, oder?
Was ist falsch in meinem Code?
Ich glaube nicht, das eine Antwort sein sollte – Unni
@Unni Also, was tun Sie erwarten? – Sraw
Ich denke, es sollte ein Kommentar sein, der besagt, dass Sie beim Ausführen eine andere Ausgabe erhalten. Ich sehe nicht, dass diese Antwort irgendein Wissen beisteuert. Zumindest eine Erklärung in Verbindung mit der Ausgabe ist immer noch ein wertvoller Beitrag. – Unni