Я думаю, что есть два компонента для этого: неблокирующий сетевой ввод-вывод и потоково-ориентированный синтаксический анализатор XML.
В первом случае вам придется выбрать неблокирующую сетьрамки, или накатить собственное решение для этого.Конечно, Twisted будет работать, но мне лично трудно инвертировать структуры управления, чтобы обернуть мой мозг.Скорее всего, вам придется отслеживать состояние в ваших обратных вызовах, чтобы прокормить анализатор.По этой причине я склонен находить Eventlet немного проще для программирования, и я думаю, что он хорошо подошел бы в этой ситуации.
По сути, это позволяет вам писать свой код какесли вы использовали блокирующий вызов сокета (с помощью обычного цикла, генератора или чего угодно), за исключением того, что вы можете создать его в отдельной сопрограмме («гринлет»), которая автоматически выполнит совместный выход, когда яОперации / O блокируются, что позволяет запускать другие сопрограммы.
Это делает использование любого потоково-ориентированного синтаксического анализатора снова тривиальным, потому что код структурирован как обычный блокирующий вызов.Это также означает, что многие библиотеки, которые напрямую не работают с сокетами или другими операциями ввода-вывода (например, анализатором), не нужно специально модифицировать, чтобы они были неблокирующими: если они блокируют, Eventlet выдает сопрограмму.
По общему признанию Eventlet - это немного магия, но я считаю, что у него намного более легкая кривая обучения, чем у Twisted, и в результате получается более простой код, потому что вам не нужно выворачивать свою логику "наизнанку"чтобы соответствовать рамке.