5

所以我有这个代码:

import time
import threading

bar = False

def foo():
    while True:
        if bar == True:
            print "Success!"
        else:
            print "Not yet!"
    time.sleep(1)

def example():
    while True:
        time.sleep(5)
        bar = True

t1 = threading.Thread(target=foo)
t1.start()

t2 = threading.Thread(target=example)
t2.start()

我试图理解为什么我不能bar去.. 如果=true这样,那么另一个线程应该看到变化并写Success!

4

2 回答 2

11

bar是一个全局变量。你应该把global bar里面example()

def example():
    global bar
    while True:
        time.sleep(5)
        bar = True
  • 读取变量时,首先在函数内部搜索,如果未找到,则在外部搜索。这就是为什么没有必要放在global bar里面foo()
  • 当一个变量被赋值global时,除非已经使用了语句,否则它会在函数内部本地完成。这就是为什么有必要放在global bar里面example()
于 2013-03-06T17:58:40.400 回答
1

您必须将“bar”指定为全局变量。否则,“bar”仅被视为局部变量。

def example():
    global bar
    while True:
        time.sleep(5)
        bar = True
于 2013-03-06T17:58:35.673 回答