その場で解析して対応する必要がある (つまり、部分ツリーを解析する) 必要があるソケットを介して XML ドキュメントを受信しています。私が望むのは、そうするためのノンブロッキングメソッドです。これにより、より多くのデータが入ってくるのを待っている間 (スレッド化せずに) 他のことを行うことができます。
読み取りバッファが空のときに反復処理が終了した場合、 iterparse のようなものが理想的です。
context = iterparse(imaginary_socket_file_wrapper)
while 1:
for event, elem in context:
process_elem(elem)
# iteration of context finishes when socket has no more data
do_other_stuff()
time.sleep(0.1)
SAXもオプションになると思いますが、私のニーズには iterparse の方が簡単に思えます。何か案は?
アップデート:
スレッドの使用は問題ありませんが、回避したいと思っていたレベルの複雑さが生じます。そのためには非ブロッキング呼び出しが適していると思いましたが、XML の解析が複雑になることがわかりました。