pool模块
pool类能够提供指定数量的进程,供用户调用。当有新的请求提交到pool中时,如果池还没有满,就会创建一个新的进程来执行请求。如果池满,请求就会告知先等待,知道池中有进程结束,才会创建新的进程来执行这些请求。
-
apply()
-该函数用于传递不定参数,同python中的apply函数一致,主进程会被阻塞知道函数执行结束。3.x之后不再出现 -
map()
map(func, iterable[, chunksize=None])
Pool类中的map方法,与内置的map函数用法基本一致,它会使得进程阻塞直到结果返回。注意:虽然第二个参数是一个迭代器,但再实际使用中,必须在整个队列都就绪后,程序才会运行子进程。 -
starmap()
starmap( func, iterable, chunksize=None)
使用起来像map方法。
Likemap()
method but the elements of theiterable
are expected to
be iterables as well and will be unpacked as arguments. Hence
func
and (a, b) becomes func(a, b). -
close()
关闭进程池(pool),使其不再接受新的任务 -
join()
主进程阻塞等待子进程的退出,join方法要在close或者terminate之后使用。
pool使用
from multiprocessing.pool import Pool
def double(i):
return i*2
pool = Pool(processes=4)
result = pool.map(double, [1,2,3])
print(result)
Pool有一个processes参数,这个参数可以不设置,如果不设置函数会跟根据计算机的实际情况来决定要运行多少个进程
我们也可自己设置,但是要综合考虑自己计算机的处理器性能,一般可以设置为CPU核心数,可以自己建立一个试验脚本进行测试
注意:进程池pool对象定义放在main函数下,否则会报错
map()函数中,第一个参数是我们需要引用的函数,第二个参数是需要迭代的参数列表。
map()函数会自动将参数列表中的每一个数据作为参数传到第一个参数引用的函数中,得到最终结算结果,作为一个列表result输出。