我想在使用pool.imap_unordered的进程之间共享一个大的numpy数组。应该很容易,但我试图从类。现在我只是每次都传递数据,一切正常,直到数据变得足够大并且池暂停并且不启动并行进程。由于每个并行进程只需要一部分大数据,另一种方法是只传递一个子集,但我不知道如何在当前框架中使用。在一个类中的进程之间共享大数据
由于用于多重功能必须在全局命名空间,我把类的超出了我的功能如下(实际问题的玩具为例):
import numpy as np
import mutliprocessing.Pool
import itertools
def process(args):
large_data, index = args
return some_costly_operation(large_data[index])
class MyClass:
def __init__(self):
# Let's pretend this is large
self.data = np.zeros(10)
def do(self):
p = Pool()
for result in p.imap_unordered(process,
itertools.izip(itertools.repeat(self.data), xrange(10)))):
print result
我知道这是一个hack- y方法来做多处理,理论上你不应该在课堂上做到这一点,并应通过检查你是否处于主要地位来保护...任何替代方案或建议?
谢谢!太棒了。我认为稍微改进是专门使用numpy.memmap,而不是python的mmap。 – aleph4
哦numpy现在提供吗?真棒! (我认为它必须使用缓冲区来破解) –