• 多进程抢票不加锁


    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 %
     
     
     
     
     
     
     
     
     
     
     
     

  • 相关阅读:
    Cookie和Session的作用和工作原理
    df和du显示的磁盘空间使用情况不一致问题
    haproxy配置详解
    使用LVS实现负载均衡原理及安装配置详解
    四层、七层负载均衡的区别
    Linux内核参数之arp_ignore和arp_announce
    Megacli查看Dell服务器Raid状态
    Visual Studio 2015中使用gdb远程调试linux程序
    编译Qt-mingw使用的opencv
    [webrtc] 强制使用tcp传输
  • 原文地址:https://www.cnblogs.com/sea-stream/p/14192854.html
Copyright © 2020-2023  润新知