多进程与多线程类似,无论是在理论还是操作上,我在这里就多线程写了一点东西。

多进程与多线程最大的区别是,多进程是真正意义上的/物理层面上的并行执行,每个进程会被分配到足够的(在实际有那么多的前提下)资源单独进行运算。而多线程则是多个进程间共享资源,通过分时获得资源的一种伪并行。

下面就一个实例来演示python进行多进程操作

import multiprocessing as mp
import threading as td
import time

def job(ss):
    print('我是', ss)
    print(ss, 'start')
    time.sleep(1)		# 做一下延迟,为了观察各进程的执行顺序
    print(ss, 'end')

if __name__ == '__main__':  # mp多进程只能main下执行,
    job('主进程step1############')
    p1 = mp.Process(target=job, args=('新进程>>>>>>>>>>>>>>>>>>>>>>>>>',))    # 创建一个进程
    # 注意当只有一个参数的时候,一定要在参数后面加一个逗号,因为args需要是一个可以迭代的参量
    p1.start()  # 开始执行新进程
    # p1.join() # 将进程声明为关键活动,让后续操作等待进程p1
    job('主进程step2$$$$$$$$$$$$')
    
Output1(将p1.join()注释掉的结果)
我是 主进程step1############
主进程step1############ start
主进程step1############ end
我是 主进程step2$$$$$$$$$$$$
主进程step2$$$$$$$$$$$$ start
我是 新进程>>>>>>>>>>>>>>>>>>>>>>>>>
新进程>>>>>>>>>>>>>>>>>>>>>>>>> start
主进程step2$$$$$$$$$$$$ end
新进程>>>>>>>>>>>>>>>>>>>>>>>>> end

Output2(不注释p1.join()的结果)
我是 主进程step1############
主进程step1############ start
主进程step1############ end
我是 新进程>>>>>>>>>>>>>>>>>>>>>>>>>
新进程>>>>>>>>>>>>>>>>>>>>>>>>> start
新进程>>>>>>>>>>>>>>>>>>>>>>>>> end
我是 主进程step2$$$$$$$$$$$$
主进程step2$$$$$$$$$$$$ start
主进程step2$$$$$$$$$$$$ end

创建新进程p1=mp.Process(target=执行函数名, args=参数列表)

执行新进程p1.start()

将新进程加入关键活动p1.join()

解释一下p1.join()这一步操作,将新进程加入关键活动这是我自定义的一种说法,我们知道的图论中有关键路径这样一种概念,关键路径上的活动叫做关键活动,关键活动的意义即是该活动完成之前,后续的活动无法继续,p1.join()就是对p1做这样一种声明,p1是关键互动,后续的操作要等p1完成之后才能进行。这一步的执行效果在OutPut2中得到了体现,我们可以看到,主进程step2是在 新进程 end之后才开始运行的。