鎖-lock
阿新 • • 發佈:2020-07-23
鎖-lock
import time from multiprocessing import Lock,Process def func(i,lock): lock.acquire() # 拿鑰匙 print('被鎖起來的程式碼%s'%i) lock.release() # 還鑰匙 time.sleep(1) def func1 (i ,lock): lock.acquire() print('被鎖起來的程式碼%s'%i) lock.release() time.sleep(1) if __name__ == '__main__': lock = Lock() for i in range(10): p = Process(target=func1,args= (i,lock)) p.start()
import time from multiprocessing import Lock,Process def func(i,lock): lock.acquire() # 拿鑰匙 print('被鎖起來的程式碼%s'%i) lock.release() # 還鑰匙 time.sleep(1) def func1 (i ,lock): with lock: # 代替acquire和release 並且在此基礎上做一些異常處理,保證即便一個程序的程式碼出錯退出了,也會歸還鑰匙 print('被鎖起來的程式碼%s'%i) time.sleep(1) if __name__ == '__main__': lock = Lock() for i in range(10): p = Process(target=func1,args= (i,lock)) p.start()
搶票的例子:
import json import time from multiprocessing import Process,Lock def search(i): with open('ticket',encoding='utf-8') as f: ticket = json.load(f) print('%s :當前的餘票是%s張'%(i,ticket['count'])) def buy_ticket(i): with open('ticket',encoding='utf-8') as f: ticket = json.load(f) if ticket['count']>0: ticket['count'] -= 1 print('%s買到票了'%i) time.sleep(0.1) with open('ticket', mode='w',encoding='utf-8') as f: json.dump(ticket,f) def get_ticket(i,lock): search(i) with lock: # 代替acquire和release 並且在此基礎上做一些異常處理,保證即便一個程序的程式碼出錯退出了,也會歸還鑰匙 buy_ticket(i) if __name__ == '__main__': lock = Lock() # 互斥鎖 for i in range(10): Process(target=get_ticket,args=(i,lock)).start()