繁体   English   中英

如何在 python 中的线程之间共享全局变量?

[英]how to share global variables across threads in python?

我想使用全局变量结束在单独线程中运行的循环。 但是这段代码似乎并没有停止循环中的线程。 我希望程序不再打印“。” 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
  1. 您正在通过调用t1.run()在主线程上执行foo() ) 。 您应该改为调用t1.start()

  2. 您有foo()的两个定义 - 没关系,但不应该存在。

  3. 您没有在线程循环中(在 foo() 中)放置sleep() )。 这是非常糟糕的,因为它占用了处理器。 你至少应该把time.sleep(0) (释放时间片给其他线程)如果不让它睡得更久一点。

这是一个工作示例:

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

您不是通过调用run()来启动线程,而是通过调用start()来启动它。 修复它使它对我有用。

除了给出的答案...

变量'run'是一个全局变量。

当您在另一个 function 中修改它时,例如在 main() function 中,您必须引用全局变量,否则它将不会被全局修改。

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

if __name__ == "__main__":
main()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM