Python线程计时器和事件对象

时间:2018-01-29 06:08:19

标签: python multithreading events timer

from threading import Timer, Event
from time import sleep

def hello(e):
    print e
    print 'Inside......'
    while True:
        if e.isSet():
            print "hello_world"
            break

if __name__ == '__main__':
    e = Event()
    t = Timer(1, hello(e,))
    t.start()
    print e.isSet()
    sleep(2)
    e.set()
    print e.isSet()

输出:

 [root@localhost ~]# python test_event.py 
<threading._Event object at 0x7f440cbbc310>
Inside......

在上面的代码中,我试图理解python中的Timer and, Event对象。如果我运行上面的代码,Timer将调用函数hello()并且它无限期地运行。主线程没有执行t.start()旁边的行。我在这里失踪了什么?

感谢。

1 个答案:

答案 0 :(得分:1)

在您的代码中,

t = Timer(1, hello(e,))

您不是将参数传递给线程,而是在创建线程之前调用该函数。 hello(e,)调用等待事件e设置的函数。由于它在这里停留在一个无限循环中并且没有从函数hello返回,因此线程创建没有发生,并且永远不会设置e

只需将其更改为有效的线程创建:

t = Timer(1, hello, [e])