进程的开启、join方法、守护进程

开启进程的两种方式

方式一:

from multiprocessing import Process

def task(name):
    print('hello', name)
	print('我是子进程')
    
if __name__ == '__main__':
    p = Process(target=f, args=('bob',))
    p.start()
    time.sleep(1)
    print('执行主进程的内容了')

方式二:

import os
from multiprocessing import Process

class Task(Process):
    def __init__(self, name):
        super().__init__()
        self.name = name
    def run(self):
        print(os.getpid())
        print(f'{self.name}正在和女主播聊天')
    
if __name__ == '__main__':
    p = Task('nick')
	p.start()

join方法

作用:阻塞,等待子进程完成。

from multiprocessing import Process
import time,os

def task(s):
    time.sleep(s)
    
if __name__ == '__main__':
    p1 = Process(target=task, args=(1,))
    p2 = Process(target=task, args=(2,))
    p3 = Process(target=task, args=(3,))
    
    p1.start()
    p2.start()
    p3.start()
    p1.join()  # 等1s
    p2.join()  # 等1s
    p3.join()  # 等1s,内部会调用wait()
    print('子进程', p1.pid)
    print('主进程', os.getpid())  # 主进程要等待所有的子进程结束才会结束,因为主进程									要在结束前回收僵尸进程
    

守护进程

守护进程的本质也是一个进程

主进程的代码执行完毕,守护进程直接结束。

大前提:主进程结束之前守护进程一直运行着

from multiprocessing import Process
import time

def task():
    print('守护进程 start')
    time.sleep(4)
    print('守护进程 end')

if __name__ == '__main__':
    p = Process(target=task)
	p.daemon = True
    p.start()
    time.sleep(2)
    print('主进程...')
posted @ 2019-09-16 15:55  17vv  阅读(202)  评论(0编辑  收藏  举报