繁体   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