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

    code
    # 文件db的内容为:{"count":1}
    # 注意一定要用双引号,不然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(0.1)  # 模拟读数据的网络延迟
        if dic['count'] >0:
            dic['count']-=1
            time.sleep(0.2)  # 模拟写数据的网络延迟
            json.dump(dic,open('db','w'))
            print('购票成功')
     
     
    def task():
        search()
        get()
     
     
    if __name__ == '__main__':
        for i in range(100):  # 模拟并发100个客户端抢票
            p=Process(target=task)
            p.start()
    outputs
    macname@MacdeMacBook-Pro py % python3 cccccc.py
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    剩余票数1
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    购票成功
    macname@MacdeMacBook-Pro py % cat db
    {"count": 0}                                                                 
    macname@MacdeMacBook-Pro py %
     
     
     
     
     
     
     
     
     
     
     
     

  • 相关阅读:
    深入理解JavaScript系列(15):函数(Functions)
    深入理解JavaScript系列(8):S.O.L.I.D五大原则之里氏替换原则LSP
    深入理解JavaScript系列(2):揭秘命名函数表达式
    深入理解JavaScript系列(3):全面解析Module模式
    深入理解JavaScript系列(21):S.O.L.I.D五大原则之接口隔离原则ISP
    深入理解JavaScript系列(18):面向对象编程之ECMAScript实现(推荐)
    理解Javascript_13_执行模型详解
    深入理解JavaScript系列(6):S.O.L.I.D五大原则之单一职责SRP
    深入理解JavaScript系列(7):S.O.L.I.D五大原则之开闭原则OCP
    深入理解JavaScript系列(11):执行上下文(Execution Contexts)
  • 原文地址:https://www.cnblogs.com/sea-stream/p/14192854.html
Copyright © 2011-2022 走看看