我有一段代码可以解析大量的XML文件(使用xml.sax文件库)以提取数据以供将来的机器学习。我希望解析部分并行运行(我在一个服务器上有24个内核,也在做一些web服务,所以我决定使用其中的20个)。解析之后,我想合并结果。下面的代码应该和我期望的完全一样,但是并行代码有一个问题。在
def runParse(fname):
parser = make_parser()
handler = MyXMLHandler()
parser.setContentHandler(handler)
parser.parse(fname)
return handler.getResult()
def makeData(flist, tasks=20):
pool = Pool(processes=tasks)
tmp = pool.map(runParse, flist)
for result in tmp:
# and here the merging part
当这个部分开始时,它在20个核心上运行了一段时间,然后只运行到一个核心上,它发生在合并部分之前(当然,合并部分只在一个核心上运行)。在
有谁能帮忙解决这个问题或是提出一个加速程序的方法吗?在
谢谢!在
ppiikkaaa公司
为什么你说在完成之前只会有一个呢?在
您使用的是
.map()
,它收集结果然后返回。 所以对于大型数据集,你可能还停留在收集阶段。在您可以尝试使用
.imap()
,它是.map()
上的迭代器版本,或者如果分析顺序不重要(从您的示例中可以看出),甚至可以使用.imap_unordered()
。在Here是相关文档。 值得一提的是:
相关问题 更多 >
编程相关推荐