2

观看 David Beazley(http://www.dabeaz.com关于 python 线程的视频,我正在尝试使用线程的东西

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

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

4

2 回答 2

4

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

于 2013-05-29T05:19:29.447 回答
2

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

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

于 2013-05-29T05:24:15.763 回答