date: 2021-08-05title: Process之锁的使用 #标题
tags: #标签
categories: python # 分类
关于锁的作用及概念,请观看老男孩视频,这里只记录代码。
锁的使用示例
from multiprocessing import Lock, Processimport jsonimport timedef search(id):with open('ticket', encoding='utf-8') as f:content = json.load(f)print((f'{id}查到了{content["count"]}张票'))def buy_ticket(id):with open('ticket', encoding='utf-8') as f:content = json.load(f)if content["count"] > 0:content["count"] -= 1print(f'{id}成功购买到票了')time.sleep(0.1)with open('ticket', encoding='utf-8', mode='w') as f:json.dump(content, f)def get_ticket(id, lock):search(id)'''low 版的锁使用方法如下:lock.acquire() # 拿钥匙print('被锁起来的代码')lock.release() # 还钥匙'''with lock: # with方法代替了acquire和release方法,并且在此基础上做一些异常处理,保证即便一个进程的代码出错退出了,也会归还钥匙。buy_ticket(id)def main():lock = Lock()for i in range(10):Process(target=get_ticket, args=(i, lock)).start()if __name__ == '__main__':main()
