学习莫烦视频总结:
多进程 Multiprocessing 和多线程 threading 类似, 他们都是在 python 中用来并行运算的. 不过既然有了 threading, 为什么 Python 还要出一个 multiprocessing 呢? 原因很简单, 就是用来弥补 threading 的一些劣势。
1、使用多进程或者多线程
import multiprocessing as mp
import threading as td
def job(a,b):
print('aaaaaa')
# 调用多线程或者多进程需要在main下进行
if __name__=='__main__':
t1 = td.Thread(target=job, args=(1,2)) # 调用threading
p1 = mp.Process(target=job, args=(1,2))# 调用multiprocessing
# 开始进程
t1.start()
p1.start()
# join()
t1.join()
p1.join()
2、queue功能:相当于队列 ,存储中间结果
import multiprocessing as mp
def job(q):
res = 0;
for i in range(1000):
res += i + i**2 + i**3
q.put(res) # 放到队列中
# 调用多线程或者多进程需要在main下进行
if __name__=='__main__':
q = mp.Queue()
p1 = mp.Process(target=job, args=(q,))# 调用multiprocessing
p2 = mp.Process(target=jon, args=(q,))
# 开始进程
p1.start()
p2.start()
# join()
p1.join()
p2.join()
# 得到输出结果
res1 = q.get()
res2 = q.get()
print(res1+res2)
3、对比 多进程(multiprocessing)和多线程(multithreaded)效率
4、进程池:将所有运行的东西放到一个“池”里面
import multiprocessing as mp
def job(x):
return x*x
def multicore():
pool = mp.Pool(processes=3) # 创建进程池,定义使用三个内核,如果没有定义,默认使用全部内核
res = pool.map(job, range(10)) # 放入方程和值
print(res)
multi_res = [pool.apply_async(job,(i,)) for i in range(10)] # 使用迭代器计算结果
print([res.get() for res in multi_res]) # 迭代输出
if __name__ == '__main__':
multicore()
5、共享内存
6、进程锁Lock
莫烦视频: