在这段代码中,我希望看到列表中的一个随机元素在至少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
获取预期行为的一种方法是确保在索引已设置的情况下不设置索引:
相关问题 更多 >
编程相关推荐