簡介:python
對於Python2而言,對於一個全局變量,你的函數裏若是隻使用到了它的值,而沒有對其賦值(指a = XXX這種寫法)的話,就不須要聲明global。多線程
相反,若是你對其賦了值的話,那麼你就須要聲明global。函數
聲明global的話,就表示你是在向一個全局變量賦值,而不是在向一個局部變量賦值。ui
若多個線程或進程同時操做這一變量可能會致使搶佔資源的現象,變量不能按照預約的邏輯進行操做,這時,在改變變量前須要對變量加互斥鎖,操做完成後釋放互斥鎖。spa
題外話:線程
GIL(Global Interpreter Lock) 全局解釋器鎖,致使任一時刻只能有一個線程使用解釋器,當用於 IO 密集型任務時,IO 期間線程會釋放解釋器。blog
在 CPU 計算繁忙的任務重 不建議使用多線程,在非 CPU繁忙型任務中建議使用多線程。進程
順便說下使用多進程的好處:徹底並行,無 GIL 的限制,可充分利用多 CPU 多核的環境。資源
多線程使用互斥鎖Demo :it
''' 多線程操做全局變量 使用互斥鎖 重點:聲明一個全局互斥鎖 ''' import threading import time counter = 0 mutex = threading.Lock() class MyThread(threading.Thread): def __init__(self): threading.Thread.__init__(self) def run(self): global counter, mutex time.sleep(1); if mutex.acquire(): counter += 1 print "I am %s, set counter:%s" % (self.name, counter) mutex.release() if __name__ == "__main__": for i in range(0, 100): my_thread = MyThread() my_thread.start()