观看David beazley(http://www.dabeaz.com)video 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
为什么会这样?有没有办法阻止线程?
答案 0 :(得分:4)
在您使用的线程库中,线程的给定实例只能启动和停止一次,之后不能再次启动。您收到的错误消息是因为您尝试在线程停止后启动它,因此您确实成功阻止了它。要“再次启动线程”,您必须实例化一个全新的线程,然后启动它。
答案 1 :(得分:2)
Python3确实修复了一点行为:你得到一个“线程只能启动一次”。这是设计的。
如果你想拥有更多控制权,你可以查看_thread模块,它只是POSIX线程的包装器。