zoukankan      html  css  js  c++  java
  • 【0917 | Day 32】进程之间的数据隔离问题/守护进程/terminate

    进程之间的数据隔离问题

    from multiprocessing import Process
    import time
    
    x = 0
    def task():
        global x
        x = 100
        print('子进程的x修改为了{}'.format(x))
    
    if __name__ == '__main__':
        p = Process(target=task)
        p.start()
        time.sleep(5)
        print(x) 
    

    守护进程

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

    由主进程创建守护进程:

    • 守护进程会在主进程代码执行结束后就终止
    from multiprocessing import Process
    import time
    def foo():
        print('守护进程 start')
        time.sleep(5)
        print('守护进程 end')
        p = Process(target=foo)#第三秒的时候主进程结束了没执行到这一步,不报错
        p.start()
    
    if __name__ == '__main__':
        p = Process(target=foo)
        p.daemon =True  # 把这个子进程定义为了守护进程,
        p.start()
        time.sleep(2)#子进程还没有结束,主进程结束了强制子进程提前结束
        print('主')
    
    • 守护进程内无法再开启子进程,否则抛出异常
    from multiprocessing import Process
    import time
    def foo():
        print('守护进程 start')
        time.sleep(2)
        print('守护进程 end')
        p = Process(target=foo)
        p.start()
    
    
    
    if __name__ == '__main__':
        p = Process(target=foo)
        p.daemon =True  # 把这个子进程定义为了守护进程
        p.start()
        time.sleep(3)
        print('主')
    
    #报错:AssertionError: daemonic processes are not allowed to have children
    

    terminate方法

    from  multiprocessing import Process,current_process
    import time
    def foo():
        print('进程 start')
        # print('---------------------    ',current_process().name)
        time.sleep(50)
        print('进程 end')
    
    
    if __name__ == '__main__':
        p = Process(target=foo)
        p.start()
        time.sleep(0.45)#start比terminate慢大约0.45秒
        p.terminate() # 给操作系统发了一个立即终止请求
        print(p.is_alive()) # True
        p.join()
        print(p.is_alive()) # False
        print('主')
    
        
    #进程 start
    #True
    #False
    #主
    
  • 相关阅读:
    Git学习的网址
    (转)读懂diff
    如何让Beamer的logo放在右上角
    测试面试的一些分享
    python学习-使用制表符或者换行符来添加空白
    python学习-python变量的命名和使用
    python学习-运行.py时,python做了啥
    2020年,很特殊的1年
    python md5验签
    postman使用当前时间戳
  • 原文地址:https://www.cnblogs.com/fxyadela/p/11532152.html
Copyright © 2011-2022 走看看