簡體   English   中英

Python線程計時器問題

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM