创建进程 方法一
1 # ------------------------------------------------------------------------ 2 创建进程1 3 # ------------------------------------------------------------------------ 4 5 # multiprocessing 多重处理 6 # Process 过程 7 # task 任务 8 # 在windows系统中,创建进程会将代码以模块得方式从头到尾加载一遍 9 # 进程一定要写在 if __name__ == '__main__': 代码块里面 10 # 函数名一旦加括号,执行优先级最高,立刻执行 11 12 from multiprocessing import Process 13 import time 14 15 def task(name): 16 print('%s is running'%name) 17 time.sleep(3) 18 print('%s is over'%name) 19 20 if __name__ == '__main__': 21 22 # task('min') 23 # 同步 函数或类加(),运行优先级第一 24 # 提示创建,立即执行 25 26 # 实例化一个Process对象 27 p1 = Process(target=task, args=('max',)) 28 # 告诉操作系统创建一个进程 29 p1.start() 30 31 # 异步:start 提示系统创建,不管系统何时创建 32 # 将代码丢一份到内存空间需要时间,再执行 33 # 相当于遇到一次io 34 # 状态变成 阻塞 --> 就绪 35 36 # 时间因此'主进程'先打印输出 37 print('主进程')
创建进程 方法二
1 # ------------------------------------------------------------------------ 2 创建进程2 3 重写cls init方法 4 run为模块接口函数 5 # ------------------------------------------------------------------------ 6 7 from multiprocessing import Process 8 import time 9 10 class MyProcess(Process): 11 def __init__(self,name): 12 super().__init__() 13 self.name = name 14 15 def run(self): 16 print('%s is running'%self.name) 17 time.sleep(2) 18 print('%s is end'%self.name) 19 20 if __name__ == '__main__': 21 obj = MyProcess('mac') 22 obj.start() 23 print('主进程')
join方法:让主进程等待子进程运行结束再运行
1 # ------------------------------------------------------------------------ 2 join方法 3 让主进程 等待 子进程运行结束 4 # ------------------------------------------------------------------------ 5 6 from multiprocessing import Process 7 import time 8 def task(name,s): 9 print('%s is running'%name) 10 time.sleep(s) 11 print('%s is over'%name) 12 13 if __name__ == '__main__': 14 p1 = Process(target=task,args='max') 15 start_time = time.time() 16 p_list = [] 17 for i in range(3): 18 p = Process(target=task,args=('子进程%s'%i,i)) 19 p.start() 20 p_list.append(p) 21 for i in p_list: 22 i.join() # 让主进程 等待 子进程运行结束 23 print('主进程',time.time()-start_time) 24 25 # ------------------------------------------------------------------------ 26 # ps 进程之间数据隔离 27 # ------------------------------------------------------------------------ 28 29 进程是将代码置入重开内存空间 30 修改后的数据为置入内存空间的数据,非原代码数据