Привет! Всех с наступающими Праздниками, особенно тех, у кого это праздник, в основном, Труда :)
У меня есть некоторое недопонимание с переходом на gevent. Пишу на Django и там вроде все более-менее понятно: подключил все необходимые модули для работы с gevent, про-манки-патчил все, как полагается, сделал пул соединений с базой, поддерживающий gevent. Все работает, распараллелилось.
Теперь непосредственно в бизнес-логике приложения. Что мне делать? У меня есть вьюхи, которые в ответ на запрос довольно долго парсят некие документы. По две-три секунды. Иногда и по 10 секунд. При обработке используются сторонние библиотеки.
Если я правильно понимаю суть gevent, то параллельность работает ровно до тех пор, пока не встретится код, который полностью заблокирует выполнение greenlet'ов. Т.е. если в какой-либо внешней библиотеке встретятся длительные вычисления, то моё приложение перестанет принимать внешние соединения до завершения работы несовместимого с gevent кода, так? Или же просто заблокируется именно этот greenlet с вызовом этой библиотеки, но другие соединения все также буду приниматься?
Если верно мое первое предположение, то следующий вопрос такой: какой выход из этого тупика? Переписывать сторонние библиотеки для поддержки gevent?
sim3x, нормально настроить uWSGI можно двумя способами - плодить воркеров (наращивать железо) или использовать встроенную в uWSGI поддержку gevent. Как еще по-Вашему "нормально"?
Pavel Denisov, у меня проект довольно простой, поэтому готов пойти на использование костыля. И, кстати, те же костыли использует Pinterest. И не переживают особо по этому поводу, и даже статьи про это пишут. С Celery мне придется в таком случае использовать уже другие костыли, усложняя клиентскую часть.