进程_锁
#进程同步:加锁(串行)-----不建议使用,因为考虑到要释放锁 from multiprocessing import Process,Lock import time def work(lock): lock.acquire() print("target %s is running" %os.getpid()) time.sleep(2) print("target %s is done" %os.getpid()) lock.release() if __name__=="__main__": lock=Lock() for i in range(3): p=Process(target=work,args=(lock,)) p.start() print("主进程") ''' target 10879 is running 主进程 target 10879 is done target 10880 is running target 10880 is done target 10883 is running target 10883 is done '''
#共享数据,硬盘(文件),Lock --不推荐 from multiprocessing import Process,Lock import time,json,random import os def search(): dic=json.load(open('db.txt')) print('%s 剩余票数 %s ' %(os.getpid(),dic['count'])) def get(): dic=json.load(open('db.txt')) time.sleep(0.1) #模拟读数据的网络延迟 if dic['count'] >0: dic['count']-=1 time.sleep(0.2) #模拟写数据的网络延迟 json.dump(dic,open('db.txt','w')) print('%s 购票成功'%os.getpid()) def task(lock): search() lock.acquire() get() lock.release() if __name__ == '__main__': lock=Lock() for i in range(10): #模拟并发100个客户端抢票 p=Process(target=task,args=(lock,)) p.start()
#共享数据,内存 Manager,Lock --不推荐 from multiprocessing import Process,Manager,Lock # def task(dic,lock): # lock.acquire() # dic["count"]-=1 # lock.release() def task(dic,lock): with lock: dic["count"]-=1 if __name__=="__main__": lock=Lock() m=Manager() dict=m.dict({"count":100}) p_list=[] for i in range(100): p=Process(target=task,args=(dict,lock)) p_list.append(p) p.start() for p in p_list: p.join() print(dict)
posted on 2020-03-25 17:15 happygril3 阅读(111) 评论(0) 收藏 举报
浙公网安备 33010602011771号