并发编程---开启进程方式---查看进程pid
1.开启进程的两种方式
方式一:
from multiprocessing import Process import time def task(name): print('%s is running' %name) time.sleep(3) print('%s is done' %name) if __name__ == '__main__': # Process(target=task,kwargs={'name':'子进程1'}) p = Process(target=task,args=('子进程',)) p.start() #仅仅只是给操作系统发送一个型号,给我开启一个子进程 print('主') #运行这个程序就会产生一个父进程,在父进程运行过程当中,发一个系统调用,开启两个进程
方式二:
from multiprocessing import Process import time class MyProcess(Process): def __init__(self,name): super().__init__() # 为了防止父类中还有,有用的方法,所以要重用一下 self.name = name def run(self): # 函数名必须用run print('%s is running' %self.name) time.sleep(3) print('%s is done' %self.name) if __name__ == '__main__': p = MyProcess('子进程1') p.start() # 默认就掉用Process 下面的run方法 print('主') ''' 主进程为什么要等子进程结束在结束呢? 1.所有的子进程都要进入到僵尸状态 2.僵尸进程在父进程一直不死的情况下,会占用系统id,这样系统在执行进程的时候就可能启动不启来 孤儿进程:是子进程没有死,父进程先死了,但是这种进程是无害的。 '''
2.查看进程pid
from multiprocessing import Process import time,os def task(): print('%s is running,parent id is <%s>' %(os.getpid(),os.getppid())) time.sleep(3) print('%s is done,parent id is <%s>' %(os.getpid(),os.getppid())) if __name__ == '__main__': p = Process(target=task,) p.start() print('主',os.getpid(),os.getppid()) #windows查看进程的id号:tasklist | findstr pycharm(进程) #linux查看进程的id号:ps aux |grep pycharm(进程) ''' 打印结果 主 1996 13980 #13980是pycharm的id号 12528 is running,parent id is <1996> 12528 is done,parent id is <1996> '''