我有一个通过套接字传入的 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 的复杂性。