2016-11-14 2 views
0

Мое основное понимание coroutines in Tornado заключается в том, что они должны помочь масштабировать сервер API, особенно с точки зрения обработки параллельных запросов, для каждого из которых требуется значительное количество времени. Тем не менее, в простой тестовой нагрузке, которую я установил, кажется, что использование сопрограмм на самом деле хуже, чем использование простых функций блокировки ...Торнадо хуже с сопрограммами против без?

Ниже приведены два скриншота, показывающие время отклика API с использованием уровня параллелизма нагрузки 4 (т. Е. 4 саранчи или «пользователи»). Конечная точка/v1 использует простые вызовы функций блокировки, а конечная точка/v2 использует tornado.gen.coroutine. Я ожидал, что среднее время отклика для GET/v2/info будет значительно ниже, чем для GET/v1/info, но на самом деле среднее время отклика на самом деле составляет выше.

GET /v1/info with 4 locusts

GET /v2/info with 4 locusts

Я чувствую, что я либо делаю что-то неправильное или непонимание фундаментальной концепции. Может ли кто-нибудь сказать мне, почему мой примерный проект показывает цифры выше? Где API на стороне coroutine хуже работает при параллельной нагрузке, чем простой API?

Пример tornado-loadtest проекта: https://github.com/martyychang/tornado-loadtest

ответ

1

Ваши сопрограммы ничего не делают асинхронной здесь, так что сопрограммная декоратор строго над головой. Декоратор @coroutine полезен только тогда, когда вы используете yield для ожидания других сопроцессоров или других асинхронных операций. В этом случае медленная вещь, которую вы делаете, связана с cpu, поэтому единственное, что вы можете сделать, чтобы улучшить работу с сопрограммами, - запустить ее в потоке с yield thread_pool_exector.submit(task) (хотя это не поможет вашей производительности в этом случай, благодаря python GIL). Coroutines помогает, когда ваша программа привязана к IO или когда вы поддерживаете соединение для внешних событий (веб-приложений реального времени).

+0

Спасибо за информацию, Бен. Итак, если я правильно понял ваш ответ: если вместо вычисления в памяти медленная операция заключалась в том, чтобы загрузить большой-й-файл из Интернета, сопрограммы могли бы быть полезны? –

+0

Да, это так. –

Смежные вопросы