python 互斥锁
import multiprocessing from multiprocessing import Lock, Process import json import time import random def buy(name, mutex): mutex.acquire() with open("./ticket.json", "r", encoding="utf-8") as f: dic = json.load(f) time.sleep(random.randint(1, 3)) if dic.get("ticket_num") > 0: dic['ticket_num'] -= 1 with open("./ticket.json", "w", encoding="utf-8") as f: json.dump(dic, f) print("%s买票成功" % name) else: print("%s买票失败" % name) mutex.release() if __name__ == '__main__': user = ["二叔", "张三", "李四", "王五", "赵六", "申七", "刘八"] mutex = Lock() for i in user: t = Process(target=buy, args=(i, mutex)) t.start()
读取的文件内容
{"ticket_num": 2}
将并发变成串行, 牺牲了效率, 但是保证了数据安全