2013-05-29 35 views
2

看大卫Beazley的(http://www.dabeaz.comvideo about python threads,我是想出来的东西与线程与蟒蛇线程尝试,如何停止线程

def countdown(n): 
    while n > 0: 
     if not n % 100000: 
      print n 
     n -= 1 

>> from threading import Thread 
>> t1=Thread(target=countdown,args=(10000000,)) 
>> t1.start();t1.join() 
>>Ctrl-C 

这给

>>10000000 
9900000 
9800000 
9700000 
9600000 
Ctrl-C9500000 
9400000 
... 
400000 
300000 
200000 
100000 
---------- 
KeyboardInterrupt : 
... 

现在我试图找到状态的线程

>>t1.isAlive() 
>>False 

所以,我试图再次运行线程,whi ch造成了错误

>>t1.start();t1.join() 
-------------- 
RuntimeError: thread already started 

为什么会发生这种情况?有没有办法阻止线程?

+0

你杀了进程你想如何运行它Ctrl-C发送信号来杀死正在运行的进程。 – 0x90

回答

4

在您使用的线程库中,线程的给定实例只能启动和停止一次,之后不会再次启动。你得到的错误信息是因为你试图在线程停止后启动一个线程,所以你确实成功地停止了它。要'再次启动线程',您必须实例化一个全新的线程并启动它。

2

Python3确实修复了一点行为:你得到一个“线程只能启动一次”。这是设计。

如果你想有更多的控制,你可以看看_thread模块,它只是POSIX线程上的一个包装。