[英]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.