我想在我的线程之外使用变量。在这个例子中,我希望程序在“update()”运行后每次打印“a”。我得到了“a”打印一次,但就是这样,我可以看到每秒打印“更新”,所以我知道我的线程运行正常,但我根本无法得到线程中的内容。为什么?
import threading
a = 1
def update():
global a
a += 1
print ("updating")
threading.Timer(1, update).start()
update()
print(a)
我看到一些代码在线程本身之外启动线程:
def update():
global a
a += 1
print ("updating")
threading.Timer(1, update).start()
update()
但我尝试过,它只是不适用于我的情况。我只打印两次“更新”。我认为它应该在函数内,以便您可以在每次调用结束时重新启动线程。正确的吗?
还是我没有正确地声明变量?
答案 0 :(得分:1)
在您的第一个代码块中,您只打印一次a
的值。但是,您的线程会继续更新它。
代替代码末尾的print(a)
,尝试在循环中打印a
,如下所示:
import threading,time
a = 1
def update():
global a
a += 1
print ("updating")
threading.Timer(1, update).start()
update()
while True:
time.sleep(5)
print(a)
执行此操作时,您将看到a
正在更新,并且您可以在线程外部访问其值。