Python多处理共享大型只读对象

时间:2017-02-24 17:29:59

标签: python python-3.x parallel-processing multiprocessing

我想在Linux上的多处理库所做的子进程之间共享一个大的只读对象。我不想使用Manager(),因为这会影响效果。

大对象不是数组,实际上是gmpy.xmpz库中gmpy2的列表。这意味着使用多处理库中的共享数组无法正常工作。

怎么做?

过去,当我使用python 2时,我可以在主进程中使用全局变量。只要我不以任何方式修改对象,子进程就可以读取它而无需在linux上复制对象。

但是,在用intel编译器重新编译python 2之后,不知何故这个技巧再也无法工作了。我也将我的代码迁移到python 3.同样的技巧仍然没有用。

旧代码:

import multiprocessing as mp
import numpy as np
def f(x):
    n = 0
    print(shared_obj[0], id(shared_obj))

def main():
    global shared_obj
    # 7Gb object. in the actual code, this is not an array
    shared_obj = np.zeros(7e9/4, dtype=np.int32)
    pool = mp.Pool(6)
    result = pool.map_async(f, range(10))
    pool.close()
    result.get()
    pool.join()

main()

错误:

self.pid = os.fork()
OSError: [Errno 12] Cannot allocate memory

0 个答案:

没有答案