通过多个进程之间的python管道发送大数据

时间:2014-03-03 15:29:49

标签: python out-of-memory multiprocessing pipe

我有一个分析大型sql跟踪文件的python脚本。 为了提高性能,处理分发到多个进程。 在初始化期间,输入文件被加载到一个数组中,然后该数组被分成4个部分(4个进程)。每个部件都使用管道发送到一个过程。

如果阵列部分大于200MB(整个阵列大约800MB),我会遇到“内存不足”的异常。

使用以下消息调用send()方法后发生异常:

  

parent_conn.send(data)MemoryError:内存不足

有没有办法增加管道的可能尺寸?

我做了什么:

def main():

    for i in range(0, self.no_threads):
            data = AnalyserData(i, queries)     #queries is a large array that contains about 1mio. elements
            parent_conn, child_conn = Pipe()                
            process = Process(target=self.init_process, args=(child_conn,))             
            process.start()             
            conns.append(parent_conn)
            parent_conn.send(data)          
            threads.append(process)             


    for i  in range(0, len(threads)):       
            res = conns[i].recv()
            res.not_supported_queries = json.loads(res.not_supported_queries)
            thread_results.append(res)  
            threads[i].join()

def init_process(self,conn):            
    data = conn.recv()
    #do some processing...      
    conn.send(result)

0 个答案:

没有答案