我最近在用 Python 2.7.5~2.7.6 玩 Python 线程我刚刚注意到一个奇怪的情况,(好吧,实际上可能不是,但对我来说真的很奇怪)
这是我正在运行的代码
首先,我定义了一个像这样扩展线程的类:
class worker(threading.Thread):
def __init__(self):
super(worker, self).__init__(name='a_name')
def run(self):
print 'running'
time.sleep(5)
print 'exiting'
然后我从python程序的主线程开始
workers = []
_worker = worker()
workers.append(_worker)
_worker.start()
is_running = _worker.is_alive()
while is_running:
for _worker in workers:
print 'checking...'
print _worker.ident, _worker.is_alive()
if not _worker.is_alive():
_worker = worker()
_worker.start()
print 'restarting...'
print _worker.ident, _worker.is_alive()
time.sleep(2)
我遇到的情况是,当我运行这段代码时,在工作线程第一次结束之前,一切都很顺利。但是,当我尝试重新启动已结束的线程时,事情变得很奇怪,因为睡眠前的最后一次检查在 is_alive 上产生了 True,但在那之后,for 循环中的第一次检查给出了 False!
以下是终端的输出:
running...checking...
4319211520 True
checking...
4319211520 True
checking...
4319211520 True
exiting...
checking...
4319211520 False
running...
restarting...
4319211520 True
checking...
4319211520 False
running...
restarting...
4325380096 True
所以我的主要问题是为什么每次我重新启动线程时检查都会失败?