zoukankan      html  css  js  c++  java
  • day 31-1 练习

    思考下列代码的执行结果有可能有哪些情况?为什么?

    from multiprocessing import Process
    
    import time
    def foo():
        print(123)
        time.sleep(1)
        print("end123")
    
    def bar():
        print(456)
        time.sleep(3)
        print("end456")
    
    if __name__ == '__main__':
        p1=Process(target=foo)
        p2=Process(target=bar)
    
        p1.daemon=True
        p1.start()
        p2.start()
        print("main-------")

    可能出现的情况如下,原因:主进程创建子进程,然后将该进程设置成守护自己的进程,守护进程会在主进程代码执行结束后就终止。

    # 一般显示的结果
    main-------
    456
    end456
    
    # 倘若机器性能非常高
    123
    main-------
    456
    end456
    
    # 倘若机器性能不是非常高,但也很强大
    main-------
    123
    456
    end456

    使用互斥锁实现模拟购票

    db,txt   # 余票数据

    {“count”: 5}

    buy_ticket.py   # 实现代码

    from multiprocessing import Process, Lock
    import time
    import json
    
    
    def show(name):
        dic = json.load(open('db.txt', 'r', encoding='utf-8'))
        print('%s 查看,剩余票数为:%s ' % (name, dic['count']))
    
    
    def get(name):
        time.sleep(0.5)
        dic = json.load(open('db.txt', 'r', encoding='utf-8'))
        if dic['count'] != 0:
            dic['count'] -= 1
            time.sleep(0.5)
            json.dump(dic, open('db.txt', 'w', encoding='utf-8'))
            print('%s 购票成功' % name)
        else:
            print('%s 购票失败' % name)
    
    
    def run(name, muext):
        show(name)
        muext.acquire()
        get(name)
        muext.release()
    
    
    if __name__ == '__main__':
        muext = Lock()
        for i in range(10):
            p = Process(target=run, args=('用户 %s' % i, muext,))
            p.start()
  • 相关阅读:
    WPF中StringToImage和BoolToImage简单用法
    linux定时执行任务
    进程管理
    防火墙和网络安全
    ICMP
    茶叶知识
    插花、花艺、种植
    AD域中添加了一个策略导致的问题
    写一个工具,将批量的“规章制度”文件上传到广西门户网站对应的文档库中
    SharePoint Online 创建门户网站系列之定制栏目
  • 原文地址:https://www.cnblogs.com/ysging/p/12319764.html
Copyright © 2011-2022 走看看