Python3之进程池

在 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()))

Screen Shot 2018-08-19 at 21.39.17.png

你可能感兴趣的:(Python3之进程池)