python进程池map_python 进程池pool简单使用

平常会经常用到多进程,可以用进程池pool来进行自动控制进程,下面介绍一下pool的简单使用。

需要主动是,在Windows上要想使用进程模块,就必须把有关进程的代码写if __name__ == ‘__main__’ :语句的下面,才能正常使用Windows下的进程模块。Unix/Linux下则不需要。

Pool类

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

才会创建新的进程来执行这些请求。

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

1、apply()

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

该函数用于传递不定参数,同python中的apply函数一致,主进程会被阻塞直到函数执行结束(不建议使用,并且3.x以后不在出现)。

2、apply_async

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

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

3、map()

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

Pool类中的map方法,与内置的map函数用法行为基本一致,它会使进程阻塞直到结果返回。

注意:虽然第二个参数是一个迭代器,但在实际使用中,必须在整个队列都就绪后,程序才会运行子进程。

4、map_async()

函数原型:map_async(func, iterable[, chunksize[, callback]])

与map用法一致,但是它是非阻塞的。其有关事项见apply_async。

5、close()

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

6、terminal()

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

7、join()

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

简单实现代码

import multiprocessing

import time

def func(msg):

print("msg:", msg)

time.sleep(3)

print("end,", msg)

if __name__ == "__main__":

# 这里设置允许同时运行的的进程数量要考虑机器cpu的数量,进程的数量最好别小于cpu的数量,

# 因为即使大于cpu的数量,增加了任务调度的时间,效率反而不能有效提高

pool = multiprocessing.Pool(processes = 3)

item_list = ['processes1' ,'processes2' ,'processes3' ,'processes4' ,'processes5' ,]

count = len(item_list)

for item in item_list:

msg = "hello %s" %item

# 维持执行的进程总数为processes,当一个进程执行完毕后会添加新的进程进去

pool.apply_async(func, (msg,))

pool.close()

pool.join() # 调用join之前,先调用close函数,否则会出错。执行完close后不会有新的进程加入到pool,join函数等待所有子进程结束

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值