py并发_进程池笔记

进程池

使用多进程的确可以充分地发挥出全部的硬件性能,但是随之有可能带来一些问题:例如,多进程过多的时候如何保证系统的性能平衡,以及对于这多个进程的管理问题。

为了更好的保证多进程和操作系统性能之间的平衡问题,所以一般可以将多个进程放在一个对象池中进行统一的管理,对象池本身是有大小限制的,这样就可以保证不会产生过多的进程从而影响到硬件的性能,这个对象池实际上就是进程池。

使用多进程技术可以提高程序的运行性能,传统的多进程开发模型只适合于并发进程数量不多的情况下,如果说此时需要产生成百上千个进程进行并发处理,那么就有可能造成资源不足的问题,同时也有可能因为进程过多而导致执行性能下降,所以为了便于系统进程的管理,开发中可以利用进程池以提高进程对象的可复用性。

创建进程池

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# coding: UTF-8
import multiprocessing,time
def work(item): # 工作进程处理函数
time.sleep(1) # 延迟操作
return "[工作进程ID:%s、工作进程名称:%s] item = %s" %(
multiprocessing.current_process().pid,
multiprocessing.current_process().name,item)
def main():
pool = multiprocessing.Pool(processes=2) #创建进程池
for item in range(10): #创建进程
# 非阻塞形式执行进程并获取结果
result = pool.apply_async(func=work, args=(item,))
print(result.get()) # 获取进程处理函数的返回结果
pool.close() #关闭进程池
pool.join() # 所有进程池执行完毕后程序结束
if __name__ == "__main__":
main()

[工作进程ID:17460、工作进程名称:SpawnPoolWorker-1] item = 0
[工作进程ID:7060、工作进程名称:SpawnPoolWorker-2] item = 1
[工作进程ID:17460、工作进程名称:SpawnPoolWorker-1] item = 2
[工作进程ID:7060、工作进程名称:SpawnPoolWorker-2] item = 3
[工作进程ID:17460、工作进程名称:SpawnPoolWorker-1] item = 4
[工作进程ID:7060、工作进程名称:SpawnPoolWorker-2] item = 5
[工作进程ID:17460、工作进程名称:SpawnPoolWorker-1] item = 6
[工作进程ID:7060、工作进程名称:SpawnPoolWorker-2] item = 7
[工作进程ID:17460、工作进程名称:SpawnPoolWorker-1] item = 8
[工作进程ID:7060、工作进程名称:SpawnPoolWorker-2] item = 9

进程已结束,退出代码0

总结

现在可以发现,此时虽然产生了10个进程,但是对于系统来讲仅仅是分配了两个进程,这两个进程就是进程池的大小,通过进程池可以保证不产生过多的进程从而造成硬件性能下降。


py并发_进程池笔记
https://blog.wangxk.cc/2020/01/30/py并发-进程池笔记/
作者
Mike
发布于
2020年1月30日
许可协议