0

我最近在用 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

所以我的主要问题是为什么每次我重新启动线程时检查都会失败?

4

1 回答 1

2

当你重新启动一个工作器时,你需要更新workers. 分配给_worker不会这样做:workers仍将包含旧线程,并且您将一遍又一遍地检查该旧线程。

于 2013-09-02T14:40:27.710 回答