作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想使用全局变量结束在单独线程中运行的循环。但是这段代码似乎并没有停止循环中的线程。我希望该程序不再打印“。” 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()
定义 - 无关紧要,但不应该存在。
您没有将 sleep()
放入线程循环中(在 foo() 中)。这非常糟糕,因为它占用了处理器。你至少应该放 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
关于python - 如何在python中跨线程共享全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5825459/
我是一名优秀的程序员,十分优秀!