У меня есть установка Tornado для работы в качестве сервера Websocket, и она отлично работает.Tornado coroutines внутри websocket
Однако я хотел бы взять входящий поток данных на веб-узел, поставить его в очередь и загрузить его на второй сервер через HTTP-запрос POST с кодировкой с чередованием в реальном времени. Я использую библиотеку запросов python для выполнения POST (он поддерживает получение кусков из генератора).
Без сопроцессоров это не сработает - поскольку метод загрузки блокирует выполнение, поэтому новые входящие данные не добавляются в очередь до завершения загрузки.
Я добавил сопрограммы через некоторые декораторы в своих методах websocket, но теперь это не работает - ничто не загружается через HTTP POST. Я даже пытался добавить выход внутри make_request функции, как так (как «любой функция, которая вызывает сопрограмма должна быть сам по себе сопрограммной, и использовать ключевое слово выхода в вызове» в соответствии с Документами Торнадо):
data = yield self.read_queue()
но это привело к синтаксической ошибке. Пример кода here.
Я нахожусь на Python 3.4.