如何在python中跨线程共享全局变量?

时间:2011-04-28 21:48:13

标签: python multithreading

我希望使用全局变量结束在单独线程中运行的循环。但是这段代码似乎没有停止循环中的线程。我希望该程序不再打印'。' 2秒后,它仍然无限期地运行。

我在这里做了一些根本错误的事情吗?

import time
import threading
run = True

def foo():
    while run:
        print '.',

t1 = threading.Thread(target=foo)
t1.run()
time.sleep(2)
run = False
print 'run=False'
while True:
    pass

3 个答案:

答案 0 :(得分:5)

  1. 您正在通过调用foo()在主线程上执行t1.run()。您应该拨打t1.start()

  2. 您有foo()的两个定义 - 无所谓,但不应该在那里。

  3. 你没有在线程循环中放入sleep()(在foo()中)。这非常糟糕,因为它占用了处理器。你应该至少把time.sleep(0)(释放时间片放到其他线程),如果不让它再睡一会儿。

  4. 这是一个有效的例子:

    import time
    import threading
    run = True
    
    def foo():
        while run:
            print '.',
            time.sleep(0)
    
    t1 = threading.Thread(target=foo)
    t1.start()
    time.sleep(2)
    run = False
    print 'run=False'
    while True:
        pass
    

答案 1 :(得分:4)

您不是通过致电run()来启动主题,而是通过调用start()启动它。 修复它使它适用于我。

答案 2 :(得分:0)

除了给出的答案......

变量'运行'是一个全局变量。

在其他功能中修改时,例如在main()函数中,必须引用变量为global,否则不会进行全局修改。

def main():
    global run
    ...
    run = False
    ...

if __name__ == "__main__":
main()