码
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()
旁边的行。我在这里失踪了什么?
感谢。
答案 0 :(得分:1)
在您的代码中,
t = Timer(1, hello(e,))
您不是将参数传递给线程,而是在创建线程之前调用该函数。 hello(e,)
调用等待事件e
设置的函数。由于它在这里停留在一个无限循环中并且没有从函数hello
返回,因此线程创建没有发生,并且永远不会设置e
。
只需将其更改为有效的线程创建:
t = Timer(1, hello, [e])