在 Python3 中,我们可以通过创建一个进程池对象来管理运行不同任务的进程。
class multiprocessing.pool.Pool([processes[, initializeer[, initargs[, maxtasksperchild[, context]]]])
processes 用于运行任务的进程数量。如果 processes 为 None,会使用运行环境的 cpu 核心数作为默认值,可以通过 os.cpu_count()查看。
initializer 每个进程在开始之前都会执行 initializer(*initargs)。
maxtasksperchild 每个线程在退出或者被新线程替代前,可以完成的任务数量。以此确保空闲的资源能够被释放出来。
context 可以用来指定启动进程的上下文,通常利用 multiprocessing.Pool()或 Pool()方法来创建进程池。在以上两种情况下,上下文都会被恰当地设置。
maxtasksperchild 是Python3.2版本的新特性, context 是Python3.4 的新特性。
from multiprocessingimport Pool
def task(i):
result = i * I
print("Task %s is running." % i)
return result
def initializer(*initargs):
print("%s appends new process..." % initargs[0])
if __name__ =='__main__':
print("Waiting for all subprocesses done...")
pool = Pool(4, initializer, 'Process pool')
result = []
for iin range(5):
result.append(pool.apply_async(task, args=(i,)))
pool.close()
pool.join()
print('All subprocesses done.')
for iin range(5):
print("task %s returns %s" % (i, result[i].get()))