0
cElementTree.iterparseを使用して繰り返し処理する大規模なXML文書(ファイルサイズ> 100 MB)を想像してみましょう。マルチ処理を使用してetree.iterparseを分割して征服する
しかし、インテルが私たちに約束してくれたコアは、どのように使用するのですか?ここで私が欲しいものです:、これでいくつかの問題点を持っていると考え
from itertools import islice
from xml.etree import ElementTree as etree
tree_iter = etree.iterparse(open("large_file.xml", encoding="utf-8"))
first = islice(tree_iter, 0, 10000)
second = islice(tree_iter, 10000)
parse_first()
parse_second()
なく、少なくとも()iterparseによって返されたイテレータは薄切りに耐えるように見えるということで。
メモリにドキュメント全体をロードしない2つのまたは4つの別々のタスク(?目的は、別々のプロセッサ上でタスクを実行するために、次にことに大きなXML文書の解析作業負荷を分割する方法がある。
私はそれぞれの要素を解析する関数でworkers.add_taskを呼び出すと思いますか? etree.parseiter()のelem:workers.add_task(parseElem、elem)?問題は、解析が比較的簡単であるため、パフォーマンスが向上しないことです。私が必要とするのは、etree.parseiter()を管理可能な塊に分割することです。理想的には、反復の100.000要素のうち、プールの各スレッドに25.000を与えます。それは可能ですか? –
それはあなたが何をするかによって異なりますが、私は推測します。 – orlp