初始化Pool时,可以指定⼀个最大进程池,当有新进程提交时,如果池还没有满,那么就会创建新进程请求;但如果池中达到最大值,那么就会等待,待池中有进程结束,新进程来执行。
非阻塞式:apply_async(func[, args[, kwds]]) :
一个程序结束运行新程序,几个任务同时进行
阻塞式:apply(func[, args[, kwds]]):
进程有先后顺序
close():关闭Pool,使其不再接受新的任务;
terminate():不管任务是否完成,立刻终止,但存在延迟;
join():主进程阻塞,等待子进程退出,必须在close或terminate之后
非阻塞方法:
from multiprocessing import Pool
import time
import os
def task(num):
"""定义的任务代码"""
print("子进程:pid=%d 开始执行任务num=%d" % (os.getpid(), num))
time.sleep(1)
print("子进程:pid=%d 结束执行任务num=%d" % (os.getpid(), num))
pool = Pool(4) # 创建进程池对象,参数表明这个进程池中包含4个子进程
for i in range(10)
pool.apply_async(task, (i,)) # 向进程池添加任务 非阻塞方法
print("主进程:所有任务都已交给进程池去做")
pool.close() # 关闭进程池对象,表示不能再向进程池中添加新的任务
pool.join() # 回收进程池资源
阻塞方法:
from multiprocessing import Pool
import time
import os
def task(num):
"""定义的任务代码"""
print("子进程:pid=%d 开始执行任务num=%d" % (os.getpid(), num))
time.sleep(1)
print("子进程:pid=%d 结束执行任务num=%d" % (os.getpid(), num))
pool = Pool(4) # 创建进程池对象,参数表明这个进程池中包含4个子进程
for i in range(10):
pool.apply(task, (i,)) # 向进程池添加任务 阻塞方法
print("主进程:所有任务都已交给进程池去做")
pool.close() # 关闭进程池对象,表示不能再向进程池中添加新的任务
pool.join() # 回收进程池资源