簡介:
對於Python2而言,對於一個全局變量,你的函數里如果只使用到了它的值,而沒有對其賦值(指a = XXX這種寫法)的話,就不需要聲明global。
相反,如果你對其賦了值的話,那么你就需要聲明global。
聲明global的話,就表示你是在向一個全局變量賦值,而不是在向一個局部變量賦值。
若多個線程或進程同時操作這一變量可能會導致搶占資源的現象,變量不能按照預定的邏輯進行操作,這時,在改變變量前需要對變量加互斥鎖,操作完成后釋放互斥鎖。
題外話:
GIL(Global Interpreter Lock) 全局解釋器鎖,導致任一時刻只能有一個線程使用解釋器,當用於 IO 密集型任務時,IO 期間線程會釋放解釋器。
在 CPU 計算繁忙的任務重 不建議使用多線程,在非 CPU繁忙型任務中建議使用多線程。
順便說下使用多進程的好處:完全並行,無 GIL 的限制,可充分利用多 CPU 多核的環境。
多線程使用互斥鎖Demo :
''' 多線程操作全局變量 使用互斥鎖 重點:聲明一個全局互斥鎖 ''' 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()