在Python函数中传递线程之间的变量[Beginner]

时间:2013-03-06 17:56:53

标签: python multithreading variables loops multiprocessing

所以我有这段代码:

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。如果是这样,那么另一个线程应该看到更改并写入{{1 }}

2 个答案:

答案 0 :(得分:11)

bar是一个全局变量。您应该将global bar放在example()

def example():
    global bar
    while True:
        time.sleep(5)
        bar = True
  • 读取变量时,首先在函数内部搜索,如果没有找到,则在外部搜索。这就是为什么没有必要将global bar放在foo()内。
  • 当变量分配一个值时,除非使用了global语句,否则它将在函数内部完成。这就是为什么有必要将global bar置于example()
  • 之内

答案 1 :(得分:1)

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

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