多程序搶票不加鎖
阿新 • • 發佈:2020-12-26
code
# 檔案db的內容為:{"count":1} # 注意一定要用雙引號,不然json無法識別 # 併發執行,效率高,但競爭寫同一檔案,資料寫入錯亂 from multiprocessing import Process,Lock import time,json,random def search(): dic=json.load(open('db')) print('剩餘票數%s' %dic['count']) def get(): dic=json.load(open('db')) time.sleep(0.1) # 模擬讀資料的網路延遲outputsif dic['count'] >0: dic['count']-=1 time.sleep(0.2) # 模擬寫資料的網路延遲 json.dump(dic,open('db','w')) print('購票成功') def task(): search() get() if __name__ == '__main__': for i in range(100): # 模擬併發100個客戶端搶票 p=Process(target=task) p.start()
macname@MacdeMacBook-Pro py % python3 cccccc.py 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 剩餘票數1 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 購票成功 macname@MacdeMacBook-Pro py % cat db {"count": 0}
macname@MacdeMacBook-Pro py %