一.主程序
from multiprocessing import Process import time,os # 当你完成的任务需要参数时 def task(name): print(name," running") time.sleep(3) print(name," stop") print(__name__) # windows 开启子进程 必须放到if中 只要你的开启子进程的代码处于全局 范围 你就应该放到if判断中 if __name__ == '__main__': # 为毛创建进程 为了帮父进程做事情 # 1.创建一个进程对象 需要传入你要做的任务 就是一个函数对象 p = Process(target=task,kwargs={"name":"jerry"}) # 2.启动它 p.start() print(id(p)) print("我是主程序我的pid:%s 我的父进程是:%s" % (os.getpid(),os.getppid())) print("我有一个儿子是 %s" % p.pid)
二.进程理论
进程和程序的区别
程序是什么?
本质就是一堆代码文件!
一个程序正在被操作系统读取并执行 就编程进程
一个程序只能有一个进程码?
可以 启动一次就产生一个进程 当然可以用代码控制是否允许多进程
一个程序能有多个进程吗?
可以 启动一次就产生一个进程 当然可以用代码控制是否允许多进程
启动进程的方式
1.系统出事化 会产生一个根进程
2.用户的交替请求 鼠标双击某个程序
3.在一个进程中 发起了系统调用启动了另一个进程
4.批量处理作业开始 某些专用计算机可能还在使用
不用操作系统创建进程的方式不同
unix< centos mac linux
完全拷贝父进程的所有数据 子进程可以访问父进程的数据吗?不可以 但可以访问拷贝过来数据副本
windows
创建子进程 加载父进程中所有可执行文件
三.父进程和子进程的执行顺序
from multiprocessing import Process import time def task(name): print("%s start"%name) time.sleep(3) print("%s stop"%name) if __name__=='__main__': p=Process(target = task,args=("jerry",)) p.start() print("我是主进程!!!") time.sleep(100) print("我是主进程!!!over")
肯定是父进程先执行,子进程执行后,父进程后续代码并发
四.父进程等待
from multiprocessing import Process import time def task(i): print("%s start"% I ) time.sleep(2) print("%s stop"%i) if __name__="__main__": start_time = time.time() ps=[] for i in range(1,3): p = Process(target = task,args=(i,)) p.start() ps.append(p) # 主进程等待子进程结束 for p in ps: p.join() print("主进程!!!!",time.time()-start_time)
五 .开启子进程的方式
from multiprocessing import Process #方式一 class MyProcess(Process): # 当进程被执行时 其实执行的就是run函数 def run(self): print("这是 run 被执行了!") #方式二 def ttt() print("111") if __name__='__main__': mp = MyProcess() mp.start() p = Process(target=ttt) p.start()
六.进程对象的常用属性
from multiprocessing import Process import time def task(name): print("start",name) time.sleep(5) print("stop",name) if __name__='__main__': p = Process(target=task,args=("jerry",),name="jerrr process-1") p.start() #p,join()#让父进程等待子进程结束 让父进程让出了CPU执行权 print(p.name) print(p.pid)# 获取这个进程的ID p.terminate() #结束子进程 print(p.is_alive())# 进程是否还存活 # p 这个进程的父进程 就是该文件 import os print(os.getpid())#当前自己进程的id print(os.getppid())#pycharm的进程id
小结:
1.多道技术
空间复用
时间复用
2.Python 如何使用多进程
1.直接创建process对象 同时传入要做的事情就是一个函数
2.创建一个雷 继承自process把要做的任务放在run方法中
3.父进程与子进程的执行顺序
4.常用属性
start 开启进程
join 父进程等待子进程
name 进程名称
is_alicve是否存活
terminate终止进程
pid 获取进程id