python 多进程使用multiprocess的库,网上有很多代码。但自己使用时有两个关于共享变量的坑。
- 如果想共享一个复杂点的变量,比如numpy矩阵,是不可以的,Manager自带的共享类型只有list,dict等这样简单的类型,且只能共享一层(不能说list里面加一个numpy矩阵也共享),所以如果自己想多个进程一起写一个numpy矩阵的时候,可以通过文件读写的方式,每一次写的时候从文件读取numpy矩阵,然后写入变量,然后在写入文件中。
- 按照上述方式需要注意的是需要加锁,共同写文件不加锁会出现问题。但这里有第二个坑,使用Lock加锁有两个,一个是multiprocess.Lock(), 一个是multiprocess.Manager().Lock(), 前者可以用与Process,但不能用于Pool,否则子进程直接不运行,后者可以用于Pool。