27 进程进阶

进程之间的运行次序

import time,os
from multiprocessing import Process
def func(args1,args2):
    print(args1,args2)
    print(1234)
    time.sleep(1)
    print(654323)
if __name__ == '__main__':
    p = Process(target=func,args=('canshu1','canshu2'))# 注册一个进程
    #p是一个进程对象,还没有启动,通过start()来启动
    p.start()
    print('1234567') #此时这个 print与p进程是同时进行的,不知道他俩谁快谁满。
    print('父进程:',os.getpid())#查看当前进程的进程号 getpid意思是get parent id
    print('父进程的父进程:',os.getppid())#查看当前进程的父进程 getppid意思是get parent process id

输出:两者通过异步运行方式运行。
在这里插入图片描述

进程的生命周期

  • 主进程
  • 子进程
  • 开启了子进程的主进程:
    1. 主进程自己的代码如果长,等待爱自己的代码执行结束
    2. 子进程的执行时间长,主进程会在主进程代码执行完毕之后,等待子进程执行完毕之后,主进程才结束。

进程中的join方法

import time
from multiprocessing import Process
def func(args1,args2):
    print('*'* args1)
    time.sleep(3)
    print('-' *args2)
if __name__ == '__main__':
    p = Process(target = func,args=(4,4))
    p.start()
    p.join()    #感知一个子进程的结束,将异步的程序改为同步
    print('=======================================:打印完了')

输出:
在这里插入图片描述
自定义类需要继承Process类,必须实现一个run方法,run方法中是在子进程中执行的代码。

import os
from multiprocessing import Process
class Myprocess(Process):
    def run(self):
        print(os.getpid)
if __name__ == '__main__':
    print('主:',os.getpid())
    p1 = Myprocess()
    p1.start()
    p2 = Myprocess()
    p2.start()

输出:
在这里插入图片描述

传参数

特别注意:一定要实现run方法,因为进程的start方法,依赖于类中的run方法,所以一定要在类中实现run方法。

import os
from multiprocessing import Process
class Myprocess(Process):
    def __init__(self,arg1,arg2):
        super().__init__() #使用父类的init方法
        self.arg1 = arg1
        self.arg2 = arg2
    def run(self):
        print(self.arg1,self.arg2)
        print(os.getpid)
if __name__ == '__main__':
    print('主:',os.getpid())
    p1 = Myprocess(3,2)
    p1.start()
    p2 = Myprocess(6,7)
    p2.start()

多进程之间的数据隔离问题

进程与进程之间数据是完全隔离的。

import os
from multiprocessing import Process
def func():
    global n
    n = 0
    print('pid:%s'%os.getpid(),n)
if __name__ == '__main__':
    n = 100
    p = Process(target=func)
    p.start()
    p.join()
    print(os.getpid(),n)

输出:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43265998/article/details/89918417
27