我最近在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
所以我的主要问题是为什么每次重新启动线程时检查都会失败?
答案 0 :(得分:2)
重新启动工作人员时,需要更新workers
。分配给_worker
将不会这样做:workers
仍将包含旧线程,并且您将一遍又一遍地检查旧线程。