Python Multiprocessing Notes

plus2047 于 2020-03-01 发布

Multiprocessing 通信

由于全局解释器的存在,Python 进行 CPU 密集任务时必须使用多进程而非多线程。科学计算中面临如何在多进程间共享数据的问题。

官方文档调研到以下主要的通信方式:

from multiprocessing import Process, Manager

def f(d, l):
    d[1] = '1'
    d['2'] = 2
    d[0.25] = None
    l.reverse()

if __name__ == '__main__':
    with Manager() as manager:
        d = manager.dict()
        l = manager.list(range(10))
        p = Process(target=f, args=(d, l))
        p.start()
        p.join()
        print(d)
        print(l)

类似于共享内存,Manager 能够实现一般的共享变量,且甚至可以跨物理主机共享变量。其问题是底层实现不是共享内存,效率较低。


其他多进程通信设备:

Multiprocessing Pool

参考博客

p = multiprocessing.Pool(4)
p.map(print, [1,2,3,4])