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 %
     
     
     
     
     
     
     
     
     
     
     

  • 相关阅读:
    前端模块化
    Spring Boot 配置中的敏感信息如何保护?
    开发者眼中的“道、法、术、器”
    只是想虐下春丽,一不当心玩了下serverless...感觉还不错哟!
    Spring Boot中使用时序数据库InfluxDB
    使用Elastic Job的时候报“Job conflict with register center”,如何处理?
    使用Elastic Job的分片配置加速任务执行和提高资源利用率
    Spring Boot 2.x基础教程:使用Elastic Job实现定时任务
    Spring Boot 2.x基础教程:使用@Scheduled实现定时任务
    Spring Cloud Alibaba 2.2.6发布:新增Nacos注册快速失败的配置
  • 原文地址:https://www.cnblogs.com/sea-stream/p/14192838.html
Copyright © 2011-2022 走看看