zoukankan      html  css  js  c++  java
  • 多进程抢票加锁

    code
    # 文件db的内容为:{"count":5}
    # 注意一定要用双引号,不然json无法识别
    # 并发运行,效率高,但竞争写同一文件,数据写入错乱
    from multiprocessing import Process,Lock
    import time,json,random
    def search():
        dic=json.load(open('db'))
        print('剩余票数%s' %dic['count'])
     
     
    def get():
        dic=json.load(open('db'))
        time.sleep(random.random())  # 模拟读数据的网络延迟
        if dic['count'] >0:
            dic['count']-=1
            time.sleep(random.random())  # 模拟写数据的网络延迟
            json.dump(dic,open('db','w'))
            print('购票成功')
        else:
            print('购票失败')
     
     
    def task(lock):
        search()
        lock.acquire()
        get()
        lock.release()
     
     
    if __name__ == '__main__':
        lock = Lock()
        for i in range(100):  # 模拟并发100个客户端抢票
            p=Process(target=task,args=(lock,))
            p.start()
    outputs 
    macname@MacdeMacBook-Pro py % python3 cccccc.py
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    剩余票数2
    购票成功
    购票成功
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    购票失败
    macname@MacdeMacBook-Pro py %
     
     
     
     
     
     
     
     
     
     
     

  • 相关阅读:
    移动零
    移除元素
    Ubuntu下安装PIL
    CSS颜色代码大全
    Test__GUI__用java编写一个简单的记事本程序,打包成jar双击运行
    Test__GUI__列出指定目录内容
    GUI__【GUI概述】【布局】【Frame】【事件监听机制】【窗体事件】【按钮】【鼠标事件】【键盘事件】【Dialog对话框】【菜单】
    Test__IO流综合应用的小练习
    IO流__【转换流的字符编码】【编码与解码】【字符编码-“联通”】
    IO流__【对象的序列化】【管道流】【RandomAccessFile】【DataStream】【ByteArrayStream等】
  • 原文地址:https://www.cnblogs.com/sea-stream/p/14192838.html
Copyright © 2011-2022 走看看