date: 2021-08-05title: Process之锁的使用 #标题
tags: #标签
categories: python # 分类

关于锁的作用及概念,请观看老男孩视频,这里只记录代码。

锁的使用示例

  1. from multiprocessing import Lock, Process
  2. import json
  3. import time
  4. def search(id):
  5. with open('ticket', encoding='utf-8') as f:
  6. content = json.load(f)
  7. print((f'{id}查到了{content["count"]}张票'))
  8. def buy_ticket(id):
  9. with open('ticket', encoding='utf-8') as f:
  10. content = json.load(f)
  11. if content["count"] > 0:
  12. content["count"] -= 1
  13. print(f'{id}成功购买到票了')
  14. time.sleep(0.1)
  15. with open('ticket', encoding='utf-8', mode='w') as f:
  16. json.dump(content, f)
  17. def get_ticket(id, lock):
  18. search(id)
  19. '''
  20. low 版的锁使用方法如下:
  21. lock.acquire() # 拿钥匙
  22. print('被锁起来的代码')
  23. lock.release() # 还钥匙
  24. '''
  25. with lock: # with方法代替了acquire和release方法,并且在此基础上做一些异常处理,保证即便一个进程的代码出错退出了,也会归还钥匙。
  26. buy_ticket(id)
  27. def main():
  28. lock = Lock()
  29. for i in range(10):
  30. Process(target=get_ticket, args=(i, lock)).start()
  31. if __name__ == '__main__':
  32. main()