Python学习笔记之进程池pool
创始人
2024-02-27 17:28:38
0

平时很多操作都会用到多进程,比如爬虫数据处理。

下面介绍一下多进程的函数方法参数及使用方法。

目录

一.进程池Pool介绍

1.apply()

2.apply_async

3.map()

4.map_async()

5.close()

6.terminal()

7.join()

二.进程池Pool使用

1.map用法

2.apply_async用法

3.进程池调用后返回结果


需要注意,在Windows上使用进程模块,

必须把有关进程的代码写在

if __name__ == “__main__”:

语句的下面,才能正常使用Windows下的进程模块,否则会报错。

Unix/Linux下则不需要。

一.进程池Pool介绍

Pool类可以提供指定数量的进程供用户调用,当有新的请求提交到Pool中时,如果池还没有满,就会创建一个新的进程来执行请求。如果池满,请求就会告知先等待,直到池中有进程结束,才会创建新的进程来执行这些请求。

下面介绍一下multiprocessing 模块下的Pool类下的几个方法:

1.apply()

    函数原型:apply(func[, args=()[, kwds={}]])

    该函数用于传递不定参数,同python中的apply函数一致,主进程会被阻塞直到函数执行结束

2.apply_async

    函数原型:apply_async(func[, args=()[, kwds={}[, callback=None]]])

    与apply用法一致,但它是非阻塞的且支持结果返回后进行回调。

3.map()

     函数原型:map(func, iterable[, chunksize=None])

    与内置的map函数用法行为基本一致,它会使进程阻塞直到结果返回。 
    注意:虽然第二个参数是一个迭代器,但在实际使用中,必须在整个队列都就绪后,程序才会运行子进程。

4.map_async()

    函数原型:map_async(func, iterable[, chunksize[, callback]])
    与map用法一致,但是它是非阻塞的。

5.close()

    关闭进程池(pool),使其不在接受新的任务。

6.terminal()

    结束工作进程,不在处理未处理的任务。

7.join()

    主进程阻塞等待子进程的退出, join方法要在close或terminate之后使用。

二.进程池Pool使用

1.map用法

map函数第一个参数是要调用的函数名不带括号,第二个参数是一个可迭代的参数,map函数会将参数一个个的传递到调用的函数中。

# -*- coding: UTF-8 -*-
from multiprocessing import Pool# 要在调用进程池执行的函数
def func(num):print("echo:", num)if __name__ == '__main__':# 进程池最大运行数 不设置则为电脑所有cpup = Pool(processes=4)# 模拟并发调用线程池i = [i for i in range(10)]p.map(func, i)

效果如下:

2.apply_async用法

# -*- coding: UTF-8 -*-
from multiprocessing import Pooldef func(num1):print("echo %d" % num1)if __name__ == '__main__':p = Pool(processes=4)for i in range(10):p.apply_async(func, (i,))# 调用join之前,先调用close函数,否则会出错。# 执行完close后不会有新的进程加入到pool# join函数等待所有子进程结束p.close()p.join()

 效果如下:

3.进程池调用后返回结果

# -*- coding: UTF-8 -*-
from multiprocessing import Pooldef func(num):return numif __name__ == '__main__':p = Pool(processes=4)# 申明一个列表,用来存放各进程返回的结果result_list = []for i in range(10):# 将返回结果append到列表中result_list.append(p.apply_async(func, [i]))# 循环读出列表返回的结果for res in result_list:print("num %d" % res.get())

效果如下:

就写到这里吧,如有不足,望指正!

 

相关内容

热门资讯

河南漯河警方作伪证被当庭揭穿,... 一份由河南省漯河市公安局出具的《情况说明》,言之凿凿称一起刑事案件中的讯问同步录音录像资料没有刻录光...
运城市司法局开展法律知识测试掀... 本报讯 近日,运城市司法局组织全体干部职工开展宪法法律知识百题测试,通过“以考促学、以考促用”的方式...
北京打造矛盾纠纷化解一站式平台... 人民网北京12月22日电 (记者董兆瑞)在日前召开的首都“十四五”规划高质量收官系列主题新闻发布会“...
推进海绵城市建设管理法治化——... 2025年9月29日,贵州省第十四届人民代表大会常务委员会第十九次会议批准《六盘水市海绵城市建设管理...
欧冶半导体助力合作伙伴接连通过... 近日,采用了欧冶半导体龙泉560芯片及解决方案的两家主流商用车Tier1,电子后视镜产品分别顺利通过...
晋中市司法局探索构建“调解+教... 本报讯(记者袁慧芳 通讯员梁国栋)近日,晋中市司法局组织召开全市“调解+教育改造”机制建设座谈会。省...
尹锡悦金建希夫妇将同时被起诉 参考消息网12月22日报道 据韩联社12月21日报道,据韩国法律界21日消息,负责调查前总统尹锡悦夫...
最高法:过去一年,食药安全、国... 极目新闻记者 曹雪娇 12月22日,最高人民法院召开新闻发布会。最高人民法院、最高人民检察院在会上联...
原创 日... 日本近期显得颇为大胆,居然想要正面挑战中国在全球的影响力。面对日本的这种挑战,中国将如何应对呢? ...
张家豪律师:职务案件分案审理,... 文/张家豪律师重庆智豪律师事务所高级合伙人 职务犯罪你知道最怕的是什么吗?不是你贪污受贿的金额有多...