5.1.7 互斥鎖
阿新 • • 發佈:2018-06-16
拷貝 pri release pan 進程 star 釋放 結果 nbsp
進程之間內存是獨立的,但其他資源是共享的,如可以操作同一個文件。
沒有互斥鎖的情況下,以下執行結果:
from multiprocessing import Process import time def task(name): print(‘%s 1‘ %name) time.sleep(1) print(‘%s 2‘ %name) time.sleep(1) print(‘%s 3‘ %name) if __name__ == ‘__main__‘: for i in range(3): p=Process(target=task,args=(‘進程%s‘ %i,)) p.start()
輸出:
進程0 1 進程1 1 進程2 1 進程0 2 進程1 2 進程2 2 進程0 3 進程1 3 進程2 3View Code
加互斥鎖:
from multiprocessing import Process from multiprocessing import Lock # 要導入Lock import time def task(name, multi_lock): multi_lock.acquire() # 獲得鎖 print(‘%s 1‘ %name) time.sleep(1) print(‘%s 2‘ %name) time.sleep(1) print(‘%s 3‘ %name) multi_lock.release() #釋放鎖 if __name__ == ‘__main__‘: multi_lock = Lock() # 子進程會拷貝相同的內存,就會變成獨立的鎖,所以應該作為參數傳給子進程 for i in range(3): p = Process(target=task, args=(‘進程%s‘ % i, multi_lock)) p.start()
# 互斥鎖犧牲效率來保證數據不錯亂
輸出:
進程0 1
進程0 2
進程0 3
進程1 1
進程1 2
進程1 3
進程2 1
進程2 2
進程2 3
5.1.7 互斥鎖