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()
  • 相关阅读:
    margin塌陷(collapse)
    this的值
    变量、函数声明提升
    Git与Svn的区别—笔记1
    ECMAScript 总结
    正则表达式
    i2c 通信
    player/stage 学习---安装
    各种分区类型对应的partition_Id
    ubuntu 映射网络驱动器到本地
  • 原文地址:https://www.cnblogs.com/ysging/p/12319764.html
Copyright © 2011-2022 走看看