多进程与多线程类似,无论是在理论还是操作上,我在这里就多线程写了一点东西。
多进程与多线程最大的区别是,多进程是真正意义上的/物理层面上的并行执行,每个进程会被分配到足够的(在实际有那么多的前提下)资源单独进行运算。而多线程则是多个进程间共享资源,通过分时获得资源的一种伪并行。
下面就一个实例来演示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之后才开始运行的。
















