进程池(Pool)可以提供指定数量的进程供用户使用。主要是起限制进程数量的作用。当新的请求提交到pool时,如果进程池没有满,那么就可以创建一个新的进程来响应请求。如果进程池满了,那么就要等到有进程结束,才可以创建新的进程。
上代码
import multiprocessing
import time
def process_func(process_id):
print('process id %d start' % process_id)
time.sleep(3)
print('process id %d end' % process_id)
def main():
pool =multiprocessing.Pool(processes=3)
for i in range(10):
#向进程池中添加要执行的任务
pool.apply_async(process_func, args=(i, ))
print('applied')
#先调用close关闭进程池,不能再有新任务被加入到进程池中
pool.close()
#用join函数等待所有子进程结束
pool.join()
print('joined')
if __name__ == '__main__':
main()
如果每次调用的都是同一个函数,可以使用Pool的map函数。
把上面的例子改一行代码就好了
import multiprocessing
import time
def process_func(process_id):
print('process id %d start' % process_id)
time.sleep(3)
print('process id %d end' % process_id)
def main():
pool =multiprocessing.Pool(processes=3)
#向进程池中添加要执行的任务
pool.map(process_func, range(10))
print('applied')
#先调用close关闭进程池,不能再有新任务被加入到进程池中
pool.close()
#用join函数等待所有子进程结束
pool.join()
print('joined')
if __name__ == '__main__':
main()
map的第一个参数是要执行的函数,第二个参数必须是一个可迭代对象。map方法会自动地帮助我们迭代第二个参数,并把迭代出的元素作为参数分批传递给第一个要执行的函数并执行。