进程创建--标准库multiprocessing模块(一--Process)

https://docs.python.org/zh-cn/3/library/multiprocessing.html#module-multiprocessing

 

multiprocessing --- 基于进程的并行

 

1、multiprocessing 模块创建进程概述

  【1】需要将要做的事情封装成函数

  【2】使用multiprocessing提供的类Process创建进程对象

  【3】通过进程对象和Process初始化进程进行进程的设置,绑定函数

  【4】启动进程,会自动执行绑定的函数

  【5】完成进程的回收

2、multiprocessing创建的进程的特点

  【1】使用multiprocessing创建进程子进程同样复制父进程的全部内存空间,之后有自己独立的空间,执行上互不干扰

  【2】子进程也是有自己特有的PID等资源

  【3】如果不使用join回收可能会产生僵尸进程

  【4】使用multiprocessing创建子进程,一般父进程功能就是创建子进程回收子进程,所有事件交给子进程完成

3、进程创建

  from multiprocessing import Process

  Process()方法

  p=Process(target=None, name=None, args=(), kwargs={})

  功能: 创建进程对象

  参数: target,要绑定的函数的名称

      name,给进程起的名称 (默认Process-1)

      args,元组, 用来给target函数位置传参

      kwargs,字典, 用来给target函数键值传参

4、启动进程 

  p.start()

  功能 : 启动进程,自动运行terget绑定函数。此时进程被创建

5、阻塞等待子进程退出

  p.join([timeout])

  功能: 阻塞等待子进程退出

  参数: 超时时间

6、process进程对象的其它属性

  【1】p.name

      可以获取进程名称

  【2】p.pid

      创建的新的进程的PID号

  【3】p.is_alive()

      判断进程是否处于alive状态

  【4】p.daemon

      默认为False, 如果设置为True ,则主进程退出时子进程也会结束

      ① daemon 属性设置要在start() 前

      ② 设置daemon为True, 则一般不需要加join

 

【mulProc-exa.py】
from
multiprocessing import Process from time import sleep import os def th1(): sleep(3) print("吃饭") print(os.getpid(),'---',os.getppid()) def th2(): sleep(4) print("睡觉") print(os.getpid(),'---',os.getppid()) def th3(): sleep(2) print("打豆豆") print(os.getpid(),'---',os.getppid()) things = [th1,th2,th3] process = [] for th in things: p = Process(target = th) process.append(p) #保存进程对象 p.start() #回收进程 for i in process: i.join() #结果 打豆豆 4762 --- 4759 吃饭 4760 --- 4759 睡觉 4761 --- 4759

 

 

 

【mulProc-name-alive.py】
from
multiprocessing import Process from time import sleep def worker(sec,name): for i in range(3): sleep(sec) print("I'm %s"%name) print("I'm working...") p = Process(target = worker,name = "Worker",\ args = (2,),kwargs = {'name':'Alex'}) p.start() print(p.name) print("Child PID:",p.pid) # p进程的进程号 print("is alive? ",p.is_alive()) #判断进程状态 p.join() print("is alive? ",p.is_alive()) #结果 Worker Child PID: 4800 is alive? True I'm Alex I'm working... I'm Alex I'm working... I'm Alex I'm working... is alive? False

 

 

 

【mulPro-daemon.py】
from
multiprocessing import Process from time import sleep,ctime def tm1(): while True: sleep(2) print(ctime()) p = Process(target = tm1) p.daemon = True p.start() print("main process over") #结果,加p.daemon=True,主程序结束,子进程不会执行 main process over

 

 

 

 

 

posted @ 2021-01-07 17:00  昱成  阅读(198)  评论(0编辑  收藏  举报