• 守护进程


    守护进程

    会随着主进程的结束而结束。

    主进程创建守护进程

      其一:守护进程会在主进程代码执行结束后就终止

      其二:守护进程内无法再开启子进程,否则抛出异常:

    '''
    守护进程
    守护--》伴随
    本质也是一个子进程
    主进程的代码执行完毕守护进程直接结束。
    '''
    from multiprocessing import Process
    import time
    def foo():
        print('守护进程 start')
        time.sleep(5)
        print('守护进程 end')
    if __name__ == '__main__':
    
        p = Process(target=foo)
        p.daemon = True#一定要在p.start()前设置,设置p为守护进程,禁止p创建子进程,并且父进程代码执行结束,p即终止运行
        p.start()
        time.sleep(2)# 把这个子进程定义为了守护进程
        print('主进程')
    #############
    守护进程 start
    主进程
    
    
    from multiprocessing import Process
    import time
    
    
    def foo():
        print('守护进程 start')
        time.sleep(3)
        print('守护进程 end')
    
    
    def task():
        print('process start')
        time.sleep(5)
        print('process end')
    
    
    if __name__ == '__main__':
        p = Process(target=foo)
        p2 = Process(target=task)
        p.daemon = True
        p.start()
        p2.start()
        time.sleep(1)
        print('主进程')
        
    ################
    守护进程 start
    process start
    主进程
    process end
    

    抢票小程序

    #db.txt
    {"count": 10}
    
    from multiprocessing import Process
    import json
    import os
    import time
    
    
    def search():
        time.sleep(1)  ##模拟网络IO
        with open('db.txt', mode='rt', encoding='utf8') as f:
            res = json.load(f)
            print(f'还剩余{res["count"]}')
    
    
    def get():
        with open('db.txt', 'rt', encoding='utf8') as f:
            res = json.load(f)
        time.sleep(1)
        if res['count'] > 0:
            res['count'] -= 1
            with open('db.txt', 'wt', encoding='utf8') as f:
                json.dump(res, f)
                time.sleep(1.5)
                print(f'进程{os.getpid()}抢票成功')
        else:
            print("票已经成功售空!!!")
    
    
    def task():
        search()
        get()
    
    
    if __name__ == '__main__':
        for i in range(15):
            p = Process(target=task)
            p.start()
            p.join()
    ################
    还剩余10
    进程17808抢票成功
    还剩余9
    进程17504抢票成功
    还剩余8
    进程18052抢票成功
    还剩余7
    进程17620抢票成功
    还剩余6
    进程5480抢票成功
    还剩余5
    进程9372抢票成功
    还剩余4
    进程18108抢票成功
    还剩余3
    进程15816抢票成功
    还剩余2
    进程4644抢票成功
    还剩余1
    进程18044抢票成功
    还剩余0
    票已经成功售空!!!
    还剩余0
    票已经成功售空!!!
    还剩余0
    票已经成功售空!!!
    还剩余0
    票已经成功售空!!!
    还剩余0
    票已经成功售空!!!
    
  • 相关阅读:
    天才AI少年范浩强坚信“弄斧要到班门”
    向Excel说再见,神级编辑器统一表格与Python
    疯狂脑机接口计划:马斯克的 “读心术”
    Jenkins 学习资料
    VMware: windows8 与 虚拟机ubuntu 14.04 共享文件夹
    [转载]一个老软件测试工程师的日志
    python 解析 配置文件
    借助github搭建自己的博客
    [转载]你需要知道的 16 个 Linux 服务器监控命令
    [转载]Linux服务器性能评估与优化
  • 原文地址:https://www.cnblogs.com/SkyOceanchen/p/11537592.html
Copyright © 2020-2023  润新知