1. 程式人生 > >5.1.7 互斥鎖

5.1.7 互斥鎖

拷貝 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 3
View 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 互斥鎖