2013-03-06 50 views
5

所以我有这样的代码:在线程之间传递变量的变化在Python函数[新手]

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!

+0

这两个函数中的'bar'不在同一个范围内。在学习多线程之前,你应该处理范围。无论如何,应该有可用于线程的互相资源构造。 – 2013-03-06 17:58:47

+0

'time.sleep(1)'中的缩进是错误的。我认为是打算在while循环中。 – 2013-03-06 18:21:27

回答

1

您必须将“bar”指定为全局变量。否则'酒吧'只被视为一个局部变量。

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

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

def example(): 
    global bar 
    while True: 
     time.sleep(5) 
     bar = True 
  • 阅读一个变量,它首先搜索的功能内,如果没有找到,外面。这就是为什么没有必要把global bar放在foo()之内。
  • 当一个变量是赋值一个值时,它在本地函数内完成,除非已经使用了global语句。这就是为什么有必要把global bar放在里面example()