Tengo un documento XML que entra por un socket que necesito analizar y reaccionar sobre la marcha (es decir, analizar un árbol parcial). Lo que me gustaría es un método de no bloqueo para hacerlo, de modo que pueda hacer otras cosas mientras espero que entren más datos (sin enhebrar).Método sin bloqueo para analizar XML en python
Algo así como iterparse sería ideal si se terminó la iteración cuando el búfer de lectura estaba vacío, por ejemplo:
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)
supongo SAX también sería una opción, pero iterparse sólo parece más sencillo para mis necesidades. ¿Algunas ideas?
Actualización:
Uso de hilos está muy bien, pero introduce un nivel de complejidad que tenía la esperanza de eludir. Pensé que las llamadas no bloqueantes serían una buena forma de hacerlo, pero me parece que aumenta la complejidad de analizar el XML.
No puedo votar esta respuesta lo suficiente – donopj2
Gracias Peter. Finalmente encontré otra respuesta a mi pregunta gracias a su respuesta. Ver mi respuesta más elaborada: https://stackoverflow.com/a/44414167/938111 – olibre