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}

将并发变成串行, 牺牲了效率, 但是保证了数据安全