1.开启子进程的两种方式 from multiprocessing import Process import time def task(name): print ( ‘ %s is running ‘ % name) time.sleep( 3 ) print ( ‘ %s is done ‘ % name) # 在windows系统上,开启子进程的操作必须放
1.开启子进程的两种方式
from multiprocessing import Process import time def task(name): print(‘%s is running‘ %name) time.sleep(3) print(‘%s is done‘ %name) #在windows系统上,开启子进程的操作必须放到if __name__ == ‘__main__‘:的子代码中 if __name__ == ‘__main__‘: p=Process(target=task,args=(‘lqz‘,)) p.start() print(‘主‘)View Code
from multiprocessing import Process import time class MyProcess(Process): def __init__(self,name): super().__init__() self.name=name def run(self): print(‘%s is running‘ %self.name) time.sleep(3) print(‘%s is done‘%self.name) # 在windows系统上,开启子进程的操作必须放到if __name__ == ‘__main__‘的子代码中 if __name__ == ‘__main__‘: p=MyProcess(‘egon‘) p.start() print(‘主‘)View Code
在这里要说明一下,开启进程需要消耗一定的cpu资源,需要一定时间,开启线程也需要一定的cpu资源。但是开启进程比线程的消耗要大很多
python无法利用到多核优势,如果想要充分的利用多核CPU资源,在python中大部分情况下需要使用多进程
强调:与线程不同,进程没有任何共享状态,进程修改的数据,改动仅限于该进程内。
进程之间内存空间是隔离的
2.join方法
join:让主进程原地等待,等待子进程运行完毕,不会影响子进程的执行
from multiprocessing import Process import time def task(name, n): print(‘%s is running‘ % name) time.sleep(n) print(‘%s is done‘ % name) if __name__ == ‘__main__‘: start=time.time() p_l=[] for i in range(1,4): p=Process(target=task,args=(‘lqz%s‘%i,i)) p_l.append(p) p.start() for p in p_l: p.join() print(‘主‘) print(time.time()-start)View Code
3.进程对象其他相关属性或方法
其实主要是获取进程号
from multiprocessing import Process,current_process import time def task(): print(‘%s is running‘ %current_process().pid) time.sleep(2) print(‘%s is done‘ %current_process().pid) if __name__ == ‘__main__‘: p=Process(target=task) p.start() print(‘主‘,current_process().pid)View Code
from multiprocessing import Process import time,os def task(): print(‘%s is running,爹是:%s‘%(os.getpid(),os.getppid())) time.sleep(3) print(‘%s is running,爹是:%s‘%(os.getpid(),os.getppid())) if __name__ == ‘__main__‘: p=Process(target=task) p.start() print(‘主:%s 主他爹:%s‘%(os.getpid(),os.getppid()))View Code
4.守护进程
守护进程:本质就是一个“子进程”,该子进程的生命周期<=被守护进程的生命周期