zoukankan      html  css  js  c++  java
  • 进程锁 购票问题

    # Author:Winter Liu is coming!
    import time
    from multiprocessing import Process, Lock
    import json
    
    
    def search(i):
        with open("ticket_data", mode="r", encoding="utf-8") as f:
            ticket = json.load(f)
        print("{},票有{}张".format(i, ticket["count"]))
    
    
    def buy_ticket(i, lock):
        # 锁定,中间部分代码唯一执行
        lock.acquire()
    
        with open("ticket_data", mode="r", encoding="utf-8") as f:
            ticket = json.load(f)
        if ticket["count"] > 0:
            ticket["count"] -= 1
            print("{}.购票成功!".format(i))
            time.sleep(0.2)
        with open("ticket_data", mode="w", encoding="utf-8") as f:
            json.dump(ticket, f)
    
        # 解锁
        lock.release()
    
    
    if __name__ == "__main__":
        # 主进程创建 锁
        lock = Lock()
        for i in range(10):
            p = Process(target=buy_ticket, args=(i+1, lock))
            p.start()

    修改后:

    # Author:Winter Liu is coming!
    import time
    from multiprocessing import Process, Lock
    import json
    
    
    def ticket_search(i):
        with open("ticket_data", mode="r", encoding="utf-8") as f:
            ticket = json.load(f)
        print("{},票有{}张".format(i, ticket["count"]))
    
    
    def buy_ticket(i):
        with open("ticket_data", mode="r", encoding="utf-8") as f:
            ticket = json.load(f)
        if ticket["count"] > 0:
            ticket["count"] -= 1
            print("{}.购票成功!".format(i))
            time.sleep(0.2)
        with open("ticket_data", mode="w", encoding="utf-8") as f:
            json.dump(ticket, f)
    
    
    def get_tiket(i,lock):
        ticket_search(i)
        lock.acquire()
        buy_ticket(i)
        lock.release()
    
    if __name__ == "__main__":
        # 主进程创建 锁
        lock = Lock()
        for i in range(10):
            p = Process(target=get_tiket, args=(i+1, lock))
            p.start()
  • 相关阅读:
    114.114.114.114和8.8.8.8
    一台电脑双网卡同时上网
    eNSP模拟器
    路由器UPnP
    子网掩码
    网线水晶头制作
    AP (无线访问接入点(WirelessAccessPoint))
    筛选键
    注册表方法修改网络名称
    图片素材网址
  • 原文地址:https://www.cnblogs.com/nmucomputer/p/12881493.html
Copyright © 2011-2022 走看看