2

将来の機械学習のためにデータを抽出するために、(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 つのコアでのみ実行されます) の前に発生します。

この問題を解決したり、プログラムを高速化する方法を提案したりできる人はいますか?

ありがとう!

ぴいっかぁ

4

1 に答える 1