Как свести к минимуму блокировку резьбы с помощью Tornado
? На самом деле, у меня уже есть рабочий код, но я подозреваю, что он не является полностью асинхронным.Оптимизируйте код асинхронного торнадо. Минимизация блокировки резьбы
У меня очень длинная задача. Он состоит из нескольких запросов к CouchDB
для получения метаданных и построения окончательной ссылки. Затем мне нужно сделать последний запрос CouchDB
и передать файл (от 10 МБ до 100 МБ). Таким образом, результатом будет потоковая передача большого файла клиенту.
Проблема в том, что сервер может принимать 100 одновременных запросов на загрузку больших файлов, и мне не нужно блокировать поток и продолжать получать новые запросы (мне нужно минимизировать блокировку потока).
Итак, я делаю несколько синхронных запросов (requests
), а затем поток большого файла с кусками с AsyncHttpClient
.
на вопросы заключаются в следующем:
1) Должен ли я использовать AsyncHTTPClient
ВЕЗДЕ? Поскольку у меня есть интерфейс, потребуется довольно много времени, чтобы заменить все синхронные запросы асинхронными. Стоит ли это делать?
2) Должен ли я использовать tornado.curl_httpclient.CurlAsyncHTTPClient
? Будет ли код работать быстрее (загрузка файла, выполнение запросов)?
3) Я вижу, что Python 3.5
представил async
, и теоретически это может быть быстрее. Должен ли я использовать async или продолжать использовать декоратор @gen.coroutine
?