将来の機械学習のためにデータを抽出するために、(xml.sax ライブラリを使用して) 非常に大量の XML ファイルを解析するコードがあります。解析部分を並行して実行したい (サーバー上に 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 コアで実行され、その後 1 つだけになり、マージ部分 (もちろん 1 つのコアでのみ実行されます) の前に発生します。
この問題を解決したり、プログラムを高速化する方法を提案したりできる人はいますか?
ありがとう!
ぴいっかぁ