Ho un documento XML in arrivo su un socket che ho bisogno di analizzare e reagire al volo (cioè analizzare un albero parziale). Quello che mi piacerebbe è un metodo non bloccante per farlo, in modo che io possa fare altre cose aspettando che arrivino altri dati (senza thread).Metodo non bloccante per l'analisi (streaming) XML in python
Qualcosa di simile iterparse sarebbe l'ideale se è finito iterazione, quando il buffer di lettura era vuota, ad esempio:
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)
Credo SAX sarebbe anche un'opzione, ma iterparse sembra solo più semplice per le mie esigenze. Qualche idea?
Aggiornamento:
utilizzando thread va bene, ma introduce un livello di complessità che speravo di eludere. Ho pensato che le chiamate non bloccanti sarebbero un buon modo per farlo, ma sto scoprendo che aumenta la complessità dell'analisi dell'XML.
Non riesco a revocare questa risposta abbastanza – donopj2
Grazie Peter. Ho finalmente trovato un'altra risposta alla mia domanda grazie alla tua risposta. Vedi la mia risposta più elaborata: https://stackoverflow.com/a/44414167/938111 – olibre