【发布时间】:2016-06-01 10:14:40
【问题描述】:
我使用Timer 对象启动了一个线程。现在,我想停止这个线程,但我不能。我用过cancel(),但它不起作用。我不知道为什么。
import threading
import time
import sys as system
def Nop():
print("do nothing")
return 0
def function():
try:
while True:
print("hello world ")
time.sleep(2)
except KeyboardInterrupt:
print( "Good job!! exception catched")
t = threading.Timer(10, function)
t.start()
print(t.getName)
counter = 0
while True:
try:
time.sleep(1)
Nop()
counter = counter +1
print(counter)
if counter == 20:
print(t.getName)
t.cancel()
counter = 0
break
if t.is_alive() == False:
print("The Timer thread is dead...")
except KeyboardInterrupt:
print("End of program")
t.cancel()
system.exit(0)
except:
print("something wrong happens...")
if t.is_alive() == True:
print("timer is alive...")
print(t.getName)
t.cancel()
print("final")
system.exit(0)
当 counter 等于 20 时线程应该停止,但它仍然活着。当我退出 while 循环时,还有另一个检查。 Timer 是活动的,是同一个线程,我尝试取消,但它不起作用。
有什么想法吗?
do nothing
17
hello world
do nothing
18
do nothing
19
hello world do nothing
20
<bound method _Timer.getName of <_Timer(Thread-6, started daemon 9916)>>
timer is alive...
<bound method _Timer.getName of <_Timer(Thread-6, started daemon 9916)>>
final
To exit: use 'exit', 'quit', or Ctrl-D.
An exception has occurred, use %tb to see the full traceback.
SystemExit: 0
hello world
hello world
hello world
hello world
【问题讨论】:
标签: python multithreading timer