1.多进程
是一种多核运算,Multiprocessing 和多线程threading 类似,它弥补了 threading 的一些劣势,比如 GIL。
1.1 添加进程 process + 存储进程输出 queue
创建方式与线程的类似
Queue的功能是将每个核或线程的运算结果放在队列中, 等到每个线程或核运行完毕后再从队列中取出结果, 继续加载运算。原因很简单, 多线程调用的函数不能有返回值, 所以使用Queue存储多个线程运算的结果
args
的参数只有一个值的时候,参数后面需要加一个逗号,表示args
是可迭代的,后面可能还有别的参数,不加逗号会出错
import multiprocessing as mp
def job(a):
res=0
for i in range(100):
res+=i+i**2+i**3
a.put(res)
if __name__=='__main__':
a=mp.Queue() #定义一个多线程队列,用来存储结果
p1=mp.Process(target=job,args=(a,)) #定义两个线程函数,用来处理同一个任务,注意args的参数
p2=mp.Process(target=job,args=(a,))
p1.start()
p2.start()
p1.join()
p2.join()
res1=a.get()
res2=a.get()
print(res1)
print(res2)
print(res1+res2)
结果为
RESTART: C:\Users\Administrator\AppData\Local\Programs\Python\Python36\4.py
24835800
24835800
49671600
1.2 多线程、多进程效率对比