1

開発中の Web サービス用にリアルタイムで解析する必要がある XML ドキュメント (1.5MB) があります。この投稿によると、Python で XML を解析するための推奨される方法である cElementTree Python ライブラリを使用していますが、これが実際に最速の方法であるかどうかはわかりません。

サーバーのメモリ使用量を最小限に抑えるだけでなく、解析のパフォーマンスを向上させたいと考えており、現在ET.iterparse()を使用して SAX アプローチをテストしています。私のベンチマークは、同じ XML ドキュメントを 200 回純粋に解析した場合の次の結果を示しています。

  • ET.XML ()を使用した DOM : 20.5 秒
  • ET.iterparse ()を使用した SAX : 32.4 秒

これは、DOM で約102 ミリ秒、 SAXで XML 文書ごとに 162 ミリ秒に相当します。

ただし、私のアプリケーションではパフォーマンスとメモリの両方が重要であるため、SAX アプローチからより多くのパフォーマンスを絞り出して DOM の 102 ミリ秒に匹敵するか、あるいはさらに高速化したいと考えています。

以下のコードのような SAX 解析の一般的な方法の 1 つを使用しています。

from cStringIO import StringIO
import xml.etree.cElementTree as ET

def parse(xml_string):  
    result = []
    io = StringIO(xml_string)
    context = ET.iterparse(io, events=("start", "end"))
    for event, elem in context:
        tag = elem.tag
        value = elem.text

        if event == 'end':
            # get value from element and add to result[]
            pass

            elem.clear()

    return result
4

0 に答える 0