python线程为什么我只能在线程外部使用全局变量一次

时间:2017-09-03 17:36:12

标签: python multithreading

我想在我的线程之外使用变量。在这个例子中,我希望程序在“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()

但我尝试过,它只是不适用于我的情况。我只打印两次“更新”。我认为它应该在函数内,以便您可以在每次调用结束时重新启动线程。正确的吗?

还是我没有正确地声明变量?

1 个答案:

答案 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正在更新,并且您可以在线程外部访问其值。