[英]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
您正在通过调用t1.run()
在主线程上执行foo()
) 。 您应该改为调用t1.start()
。
您有foo()
的两个定义 - 没关系,但不应该存在。
您没有在线程循环中(在 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.