python--利用concurrent.futures 来实现真正的平行计算

    由于python的全局解释锁(GIL)使得我们无法使用线程进行真正的平行计算,因此,我们把总计算量分配到多个独立的任务中,并在多个CPU核心上同时运行任务是很难实现的。

    为解决该类问题,提高代码执行速率,我们尝试可以引入concurrent.futures模块,来利用另外一个名叫multiprocessing的内置模块实现这种需求。该做法会以子程序的形式,平行地运行多个解释器,从而令python程序能够利用多核心CPU来提升执行速度。由于子进程与主解释器相分离,所以,他们的全局解释器锁也是相互独立的。每个子进程都可以完整的利用一个CPU内核,而且这些子进程都与主进程之间有着联系,通过这条联系渠道,子进程可以接收主进程发过来的指令,并把计算结果返回给主进程。

    例如,我们首先定义一个函数:

def demo(info):
    a, b = info
    low = min(a, b)
    for i in range(low,0,-1):
        if a % i == 0 and b % i == 0:
            return i 

接着,我们分别计算没有做平行计算和做了平行计算所需要的时间:

首先,我们先导入一个库:

from concurrent.futures import ProcessPoolExecutor

接着:python--利用concurrent.futures 来实现真正的平行计算_第1张图片

然后运行程序之后,我们会发现,直接运行所耗时间大概为14秒,然后双核计算为7秒python--利用concurrent.futures 来实现真正的平行计算_第2张图片

另外,关于multiprocessing开销较大的原因:主进程和子进程之间,必须进行序列化和反序列化操作,而程序中的大量开销,正是由这些操作所引发的。

你可能感兴趣的:(Python,并发及并行)