Я бы предложил следующее. (Так как это то, что мы делаем.)
Простой сервер WSGI ( wsgiref или werkzeug ). Входящие HTTP-запросы, естественно, будут формировать очередь. Никаких дальнейших очередей не требуется. Вы получаете запрос, вы порождаете подпроцесс в детстве и ждете его завершения. Простой список детей обо всем, что вам нужно.
Я использовал модификацию основного цикла «Служить навсегда» в wsgiref
, чтобы периодически опрашивать всех детей, чтобы узнать, как у них дела.
Простая база данных SQLite может отслеживать состояние запроса. Даже это может быть излишним, потому что ваши входные данные и результаты XML могут лежать в файловой системе.
Вот и все. Очереди и потоки на самом деле не входят в это. Один длительный внешний процесс слишком сложен для координации. Проще всего, если каждый запрос - это отдельный, дочерний процесс.
Если вы получаете огромные пакеты запросов, вы можете захотеть, чтобы простой губернатор не создавал тысячи детей. Регулятор может быть простой очередью, построенной с использованием списка с append () и pop (). Каждый запрос поступает, но отбираются только те запросы, которые соответствуют определенному пределу «Максимальное количество детей».