Python进程池Pool详解
admin
2024-03-19 06:44:34

文章目录

    • 初步使用
    • apply_async
    • map_async
    • `close`、`terminate`和`join`

如果疯狂地弹进程,很容易导致内存爆炸,所以非常有必要设计一种功能,可以限定同时运行的进程数,这就是进程池。

初步使用

举一个最简单的例子,

from multiprocessing import Pooldef test(N):print(N)if __name__ == '__main__':p = Pool(5)for i in range(10):p.apply_async(func=test, [i])p.close()

这里面p就是最多容量为5的一个进程池,apply_async表示将func压入进程池,当进程数达到5个时,发生阻塞,之后每完成一个进程,就添加一个进程,直到所有进程都已经装入进程池。

apply_async

显而易见,线程池中最为关键的方法就是apply_async, 除了参数func代表将要执行的进程之外,还有其他可选参数,整体上apply_async的调用方法如下

apply_async(func, args, kwds, callback, error_callback)

其中,func不必多说,argsfunc的参数列表,对应上面案例中的[i]kwds为参数字典,对于形如下面的func而言,

def test(a, b):print(a+b)

argskwds的区别如下

p.apply_async(func=test, args=[1,2])
p.apply_async(func=test, kwds={'a':1, 'b':2})

此外,callback表示,当进程执行完毕后的回调函数,error_callback表示当进程出现错误时的回调函数。

map_async

如想理解map_async,最好先复习一下Python中map的用法。map就是根据提供的函数对可迭代对象进行迭代操作,res = map(func, iters)就等价于res = [func(i) for i in iters]

相应地,map_async的关键参数同样为func, iterable,其具体参数如下

map_async(func, iterable, chunksize, callback, error_callback)

其中,callbackerror_callbackapply_async中的作用相同,都是迭代之后进行的回调操作。

chunksize为块尺寸,顾名思义,map_async会将可迭代参数分成多个区块,进行同时处理,理论上chunksize越大则处理越快。

closeterminatejoin

其中

  • close 阻止后续任务提交到进程池
  • terminate 终止进程池
  • join 等待进程池工作结束

在实际应用中,terminate可以解决一个痛点问题,即进程池已经开始工作了,突然发现参数设置有误,想要马上停止进程池,这就是terminate大显身手的时候。

closejoin一般配合使用,且join必须要在使用close或者terminate之后才能使用,表示等待进程池处理完成。

相关内容

热门资讯

盘点2026年好用的童趣风格温... 当亲子度假成为家庭出游的核心刚需,不少父母都陷入了相似的困境:想趁假期泡温泉放松身心,却要全程盯顾精...
伊犁亲子游超全攻略!7天6晚带... 每年6-8月,伊犁就变成了童话世界。无边无际的草原上开满野花,雪山融水汇成清澈的溪流,成群的牛羊在蓝...
丹东:樱韵花开,亲子寻芳 春和景明,连日来丹东迎来最美樱花季。 4月17日,丹东市第三幼儿园“樱韵花开·寻迹花神”第十一届樱花...
守护成长 童心同行—— 翠云轩... “守护成长 童心同行” 就在 4 月 18 日下午,翠云轩小区迎来了第二场别开生面的儿童性教育主题...
2026年新疆奢华亲子游推荐,... 在2026年,选择新疆作为奢华亲子游的家庭越来越多。这里有丰富的自然风光与独特的文化活动,吸引着各个...