2016-08-10 55 views
0

考慮下面的代碼:如何從一個線程訪問全局變量在Python

from threading import Thread 

def main(): 
    number = 5 

    class my_thread(Thread): 
     def __init__(self, range): 
      Thread.__init__(self) 
      self.range = range 

     def run(self): 
      global number 
      for i in self.range: 
       number += 1 

    t1 = my_thread(range(4)) 
    t1.start() 
    t1.join() 
    print number 

main() 

從這個程序的輸出是

Exception in thread Thread-1: 
Traceback (most recent call last): 
    File "C:\Tools\Python27\lib\threading.py", line 801, in __bootstrap_inner 
    self.run() 
    File "C:\Dev\Workspace\Hello World\Hello.py", line 14, in run 
    number += 1 
NameError: global name 'number' is not defined 

5 

顯然,my_thread不必number訪問。爲什麼會這樣,我如何正確訪問它?

回答

2

你需要讓number全球在其第一個定義是這樣的:

def main(): 
    global number 
    number = 5 

...etc...