[英]Python threaded timer issue
在这段代码中,我希望看到列表中的随机元素至少在5秒钟内变为1。 我经常看到元素只经过几次迭代就变为1,然后重置为0。我缺少什么? 它与线程不关闭有关吗? 有人可以告诉我如何解决吗?
import threading
import random
import time
def lreset(x):
global flags
flags[x] = 0
return
flags = [0,0,0,0,0,0,0,0]
while True:
index = random.randint(0,7)
flags[index] = 1
t = threading.Timer(5, lreset, [index])
t.start()
print flags
time.sleep(1)
发生这种情况是因为可能有多个计时器正在等待重置同一索引。 想象一下,在第一轮和第三轮中random.randint
返回相同的索引。 在前五个回合的输出中,索引为1
。 然后,在第六轮,将按照您的期望将输出重置为0
。
现在,如果random.randint
将在第七轮再次返回相同的索引,则输出将显示索引为1
。 然后,在第八轮之前,在第三轮设置的计时器将重置索引,因此在第八轮输出中它将显示为0
。
获得预期行为的一种方法是,确保没有设置索引(如果已设置):
while True:
index = random.randint(0,7)
if flags[index] == 0:
flags[index] = 1
t = threading.Timer(5, lreset, [index])
t.start()
print flags
time.sleep(1)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.