【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
#主
posted @ 2019-09-17 10:40  fxyadela  阅读(107)  评论(0编辑  收藏  举报