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()
  • 相关阅读:
    llvm,gcc
    smp,numa,mpp,umam,olap,dss,oltp,greenplum,presto
    数据结构学习时的零散算法
    Hadoop 伪分布式上安装 HBase
    可以ping通虚拟机但不能telnet 9000端口
    北邮连接bupt-mobile
    北邮软院机试2018
    研究生面试自我介绍
    Java面试题
    操作系统面试题
  • 原文地址:https://www.cnblogs.com/ysging/p/12319764.html
Copyright © 2011-2022 走看看