试验python线程,如何停止线程

时间:2013-05-29 05:12:09

标签: python multithreading

观看David 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

所以,我试图再次运行该线程,这导致了错误

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

为什么会这样?有没有办法阻止线程?

2 个答案:

答案 0 :(得分:4)

在您使用的线程库中,线程的给定实例只能启动和停止一次,之后不能再次启动。您收到的错误消息是因为您尝试在线程停止后启动它,因此您确实成功阻止了它。要“再次启动线程”,您必须实例化一个全新的线程,然后启动它。

答案 1 :(得分:2)

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

如果你想拥有更多控制权,你可以查看_thread模块,它只是POSIX线程的包装器。