Python使用多核心进行并行计算

Python中的并行计算可用多线程和多核心两种技术实现。多线程技术在同一时间依旧只能运行一个线程,只是节约了每个线程的读写时间,未必能显著提升程序,因此更能充分发挥当代计算机性能的通常是后者。

一、调用multiprocessing模块

使用import multiprocessing调用multiprocessing模块。

二、定义池Pool

使用pool = multiprocessing.Pool(processes = n)定义一个池用于自动分配循环变量,其中processes参数表示调用的核心数量,这取决于计算机本身,缺省默认调用全部核心。

三、运行池Pool

使用pool对象对map()函数进行循环pool.map(FUN, X)

四、传输数据

使用共享内存multiprocessing.Value()可在核之间传输数据:v = multiprocessing.Value('DATA_TYPE', X)

五、保护进程数据

使用锁模块multiprocessing.Lock()可以保护进程中的数据。

lock = multiprocessing.Lock()
lock.acquire()
lock.release()

六、效率测试

使用一个简单例子进行测试,输出for方法和并行计算的效率:

import multiprocessing
import time

def work(m):
    m += 100
    m -= 100
    m *= 100
    m /= 100

if __name__=='__main__':
    m = [10]*100000000

    timetime_start = time.time()
    for n in m:
        work(n)
    time_end = time.time()
    print(f'for method: {time_end - timetime_start}')

    pool = multiprocessing.Pool(processes=6)
    timetime_start = time.time()
    pool.map(work, m)
    time_end = time.time()
    print(f'multiprocessing method: {time_end - timetime_start}')

输出结果如下:

for method: 11.149296998977661
multiprocessing method: 3.7635178565979004

可见并行计算仅使用6个核心,就能达到原来约3倍的效率。

Xiaoran Wu
Xiaoran Wu
Master’s student