zoukankan      html  css  js  c++  java
  • Python并发编程-多进程进程锁

    from multiprocessing import Process
    import json
    import time
    from multiprocessing import  Lock
    
    def show(i):
        with open('ticket') as f:
            dic = json.load(f)#load直接打开文件, 不用read, loads操作字符串,需要read
        print('余票: %s' % dic['ticket'])
    
    def buy_ticket(i,lock):
        lock.acquire() ##拿到钥匙进门,其他进程阻塞, acqurie和release之间的代码只能被一个进程执行
        with open('ticket') as f:
            dic = json.load(f)#load直接打开文件, 不用read, loads操作字符串,需要read
            time.sleep(0.1)
        if  dic['ticket'] > 0 :
            dic['ticket'] -=1
            print('33[32m%s买到票了33[0m'%i) #console改为绿色
        else:
            print('33[31m%s没有买到票了33[0m'%i) #console改为红色
        time.sleep(0.1)
        with open('ticket', 'w') as f:
            json.dump(dic,f) #修改json文件,减去被买去的票
        lock.release() #释放钥匙
    
    
    
    if __name__ == '__main__':
        for i in range(10):
            p = Process(target=show, args=(i,))
            p.start()
        lock = Lock() #产生钥匙
        for i in range(10):
            p = Process(target=buy_ticket, args=(i,lock))
            p.start()
    #没有进程锁是, 会出现多个用户都买到票的情况, 但是只有一张票
    #进程锁
    
    >>>
    余票: 1
    余票: 1
    余票: 1
    余票: 1
    余票: 1
    余票: 1
    余票: 1
    余票: 1
    5买到票了
    余票: 0
    2没有买到票了
    余票: 0
    4没有买到票了
    0没有买到票了
    8没有买到票了
    1没有买到票了
    7没有买到票了
    9没有买到票了
    3没有买到票了
    6没有买到票了
    
    
    
  • 相关阅读:
    linux 6.9 补丁修补漏洞
    更改交换分区
    MariaDB Windows 安装
    关于Oracle内存分配-解决实际运行时最大Session数不一致远小于系统配置最大的Session数目
    Angular 相关概念
    实用工具推荐
    DDD目录结构
    全局异常处理区分返回响应类型是页面还是JSON
    Lambda学习总结(三)--方法引用
    Lambda学习总结(二)--Stream流
  • 原文地址:https://www.cnblogs.com/konglinqingfeng/p/9687349.html
Copyright © 2011-2022 走看看