我有一个分析大型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)