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()
  • 相关阅读:
    guake 3.4发布,支持切分窗口
    tmux下vim颜色不正常问题
    tmux下make menuconfig背景色不正常问题
    命令行工具PathMarker
    busybox syslog介绍
    linux下检测可用串口并使用minicom打开(改进版)
    linux下检测可用串口并使用minicom打开
    guake终端复制标签页
    shell命令行混合进制计算器smartbc
    在shell脚本中添加暂停,按任意键继续
  • 原文地址:https://www.cnblogs.com/nmucomputer/p/12881493.html
Copyright © 2011-2022 走看看