如何在Python中从线程访问全局变量

如何在Python中从线程访问全局变量,python,multithreading,thread-safety,Python,Multithreading,Thread Safety,考虑以下代码: 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

考虑以下代码:

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

显然,
myu线程
没有访问
number
的权限。这是为什么?我如何才能正确访问它

您需要在第一次定义时将
number
设为全局,如下所示:

def main():
    global number
    number = 5

...etc...

您需要在第一次定义时将
number
设为全局,如下所示:

def main():
    global number
    number = 5

...etc...