40 多程序同步 鎖 多把鎖

2022-09-03 00:54:09 字數 1775 閱讀 7598

缺點:同步程序,併發沒有了。效率低下。

lock:一把鎖

lock.acquire() 拿著鎖 通訊證

lock.release() 放掉鎖

**semaphore**:多把鎖,同時提供多把鎖/通行證,保證可以有一定個數的程序保持併發,這個用的多一點

一般情況下我們多程序運算元據庫的時候必須加鎖,這樣才能保證資料的有序性

#多程序同步/鎖

from multiprocessing import process,current_process,lock

import sys

from time import sleep

def work(l):

print('%s程序已經開始了' % current_process().name)

l.acquire() #搶占這個通訊證/鎖

for var in range(65,68):

print('%s:%s' % (current_process().name,chr(var)))

sys.stdout.flush()

l.release() #放掉通行證

def main():

l = lock()

process(target=work,name='a',args=(l,)).start()

process(target=work,name='b',args=(l,)).start()

process(target=work,name='c',args=(l,)).start()

if __name__ == "__main__":

main()

執行結果:

a程序已經開始了               y

a:aa:b

a:cb程序已經開始了

b:ab:b

b:cc程序已經開始了

c:ac:b

c:c

#多程序同步/多把鎖(訊號量)

from multiprocessing import process,current_process,semaphore

import sys

from time import sleep

def work(s):

print('%s程序已經開始了' % current_process().name)

s.acquire()

for var in range(65,100):

print('%s:%s' % (current_process().name,chr(var)))

sys.stdout.flush()

s.release()

def main():

s = semaphore(3) #通行證,限制同一時間提供了3把鎖,也就是說同一時間最多3個程序同時工作,其餘的程序阻塞等待,

process(target=work,name='a',args=(s,)).start()

process(target=work,name='b',args=(s,)).start()

process(target=work,name='c',args=(s,)).start()

process(target=work,name='d',args=(s,)).start()

process(target=work,name='e',args=(s,)).start()

if __name__ == "__main__":

main()

程序(同步)鎖

很多時候,我們需要在多個程序中同時寫乙個檔案,如果不加鎖機制,就會導致寫檔案錯亂 這個時候,我們可以使用multiprocessing.lock 我一開始是這樣使用的 from multiprocessing import process,lock 鎖要從從multiprocessing匯入 def...

python程序同步鎖

同步鎖 通常被用來實現共享資源的同步訪問,為每乙個共享資源建立乙個lock物件當你需要訪問該資源時,呼叫qcuqire方法來獲取鎖物件 如果其他執行緒已經獲得該鎖,則當前執行緒需等待期被釋放 待資源訪問完後,在呼叫release方法釋放鎖 死鎖 指倆個或倆個以上的程序或執行緒在執行過程中,因爭奪資源...

Linux程序同步之記錄鎖

記錄鎖相當於執行緒同步中讀寫鎖的一種擴充套件型別,可以用來對有親緣或無親緣關係的程序進行檔案讀與寫的同步 通過fcntl 函式來執行上鎖操作。儘管讀寫鎖也可以通過在共享記憶體區來進行程序的同步,但是 fcntl 記錄上鎖往往更容易使用,且效率更高。記錄鎖的功能 當乙個程序正在讀或修改檔案的某個部分是...