Python进程池

一、进程池概念

1、概念:

进程池是资源进程、管理进程组成的技术的应用。

2、进程池组成:

1)、资源进程:

		预先创建好的空闲进程,管理进程会把工作分发到空闲进程来处理;
		
2)、管理进程:

		管理进程负责创建资源进程,把工作交给空闲资源进程处理,回收已近处理完工作
		的资源进程。
		
		1>、进程池的关键点:
		
				管理进程如何有效的管理资源进程,分配任务给资源进程,回收空闲资源进程,
				管理进程要有效的管理资源进程,那么管理进程跟资源进程必然需要交互。
		2>、交互方式:
				IPC 信号 信号量 消息队列 管道等进行交互

二、进程池特征

	1、默认开启的进程池数是CPU核数
	2、进程池有同步异步问题

三、进程池创建

1、apply_async()异步提交任务:
from multiprocessing import Process,Pool
		def func(i):
		    i+=1
		    return i#普通进程处理过的数据返回给主进程p1
		
		def call_back(p1):
		    p1+=1
		    print(p1)
		
		if __name__ == '__main__':
		    p = Pool()
		    for i in range(10):
		        p1 = p.apply_async(func,args=(i,),callback = call_back)#p调用普通进程并且接受其返回值,将返回值给要执行的回调函数处理
		    p.close()
		    p.join()
2、apply()同步提交任务:
from multiprocessing import Pool
				import time
				
				def func(num):
				    num += 1
				    return num
			if __name__ == '__main__':
			    p = Pool(5)
			    start = time.time()
			    for i in range(10000):
			        res = p.apply(func,args=(i,))# 同步处理这100个任务,同步是指,哪怕我进程中有5个进程,也依旧是1个进程1个进程的去执行任务
			        # time.sleep(0.5)
			        print(res)
			    print(time.time() - start)

四、论述进程池同步异步问题

1、apply_async()异步提交:

	异步提交的特点:全异步,主进程和子进程都异步了,当主进程代码结束后,程序就
	结束啦,进程池里面的子进程全部被回收了。 异步的效率,也就是池中的进程一次性都去执行任务.
	
	所以要用到join方法:阻塞直到进程池中的所有任务都执行完毕;
	在没有返回值的情况下,要想所有任务都能顺利执行完毕,就要用pool.close(),pool.join(),r.get();
	
	pool.close():停止添加任务
	pool.join():等待子进程结束
	
	get()方法不能在提交任务之后立刻执行。应该是先提交所有任务在通过get()取返回值

2、apply()同步提交:

	apply()方法提供了返回值:子进程对应函数的返回值。
	弊端:一个一个顺序执行,没有任何并发效果。哪怕我进程中有5个进程,也依旧是1个进程1个进程的去执行任务

五、程序的两种类型计算型与IO型了解

1、计算型:

	适合开启多进程,但是不适合开启很多进程。
	因为计算型能充分占用CPU,适合使用多进程,因为多进程能充分利用多核。

2、IO型:

	不适合开启多进程:因为开启多进程的目的是为了充分利用多核。IO型大部分时间
	都在等,所以一个CPU轮流执行就够了,因为大部分时间都在阻塞队列里,而不是在运行状态中,
	如socket程序,爬虫,文件操作等耗时操作。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值