缺點:同步程序,併發沒有了。效率低下。
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程序已經開始了 ya: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 記錄上鎖往往更容易使用,且效率更高。記錄鎖的功能 當乙個程序正在讀或修改檔案的某個部分是...