92. python中的多进程

python中的多进程由multiprocessing来实现,它支持使用与线程模块类似的API来生成进程。 多处理包同时提供本地和远程并发,通过使用子进程而不是线程有效地避开全局解释器锁(GIL)。 因此,多进程模块允许程序员充分利用给定计算机上的多个处理器。它可以在Unix和Windows上运行。

多处理模块还引入了在线程模块中没有类似的api。这方面的一个主要例子是Pool对象,它提供了一种 方便的方法,可以跨多个输入值并行执行一个函数,并在多个进程之间分布输入数据(数据并行性)。 下面的例子演示了在模块中定义这些函数的常见做法,以便子进程可以成功地导入该模块。 这个使用Pool的数据并行的基本示例:

from multiprocessing import Pool

def f(x):
    return x*x

if __name__ == '__main__':
    with Pool(5) as p:
        print(p.map(f, [1, 2, 3]))

进程池Pool

Pool类表示一个worker进程池。它有一些方法,可以让任务以几种不同的方式被加载到工作进程中。

map(func, iterable[, chunksize])

是内置函数map()的一个并行等价函数(尽管它只支持一个可迭代的参数)。它会阻塞,直到结果计算完成。 此方法将可迭代性分解为若干块,并将其作为单独的任务提交给进程池。这些块的(近似的)大小可以通过 将chunksize设置为一个正整数来指定。具体请参考 https://docs.python.org/3.7/library/multiprocessing.html#module-multiprocessing