执行顺序这是一个测试Threading
代码:的Python:在线程
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()
结果:
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
这是我所期望的结果之一:
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
.
.
我不明白为什么线程ID = 0继续出现在第一个地方......据我所知,thre的执行顺序广告是随机的,对吧?
我的代码有什么问题?
我不认为这应该是@Unni所以你能指望一个答案 – Unni
? – Sraw
我觉得它应该是一个评论,说你在执行时会得到不同的输出。我没有看到这个答案贡献任何知识。至少对产出的解释仍然是一项宝贵的贡献。 – Unni