lightarhont
@lightarhont
python/php developer

Можно ли реализовать асинхронность частично?

С моей точки зрения асинхронное программирование имеет выгоду, когда мы запрашиваем какие-то данные. И я сравниваю его с Аяксом. Но на Python я его никогда не применял.
Вопрос: можно ли в Django или Pyramid реализовывать асинхронность частично. Т.е. пока мы запрашиваем информацию у Mysql для рендеринга какого то блока кода, мы продолжаем выполнение остального кода. С проектами с множеством блоков это может достаточно ускорить загрузку и оптимизирует потребление ресурсов сервера. Я так думаю. Хотя тут ещё надо оффтопом задать вопрос про кеширование. Осуществляется ли успешно кеширование в условиях асинхронности?
  • Вопрос задан
  • 2624 просмотра
Пригласить эксперта
Ответы на вопрос 4
foxmuldercp
@foxmuldercp
Системный администратор, программист, фотограф
асинхронность это и есть параллельное выполнение независимых частей кода - например - обновление ленты соцсети и показ рекламных блоков в боковой панели.
А куда идет запрос -- в сервер кеша, в бд - дело десятое
Ответ написан
Комментировать
tenoclock
@tenoclock
Python/Django программист
Ваша задача выполняется двумя потоками. Для этого и нужен модуль threading. Почитайте про него.
А кэширование от этого совершенно не зависит.
Ответ написан
Комментировать
un1t
@un1t
С Джангой такой трюк врядли получиться. Попробуй Tornado, Кешировние в условиях асинхронности работает, но там обращаться с кешем конечно посложнее чем в синхронном подходе. Допустим нам надо сделать выборку из базы, отрендерить html и закешировать его. В синхронном подходе все просто.
1. Делаем запрос к базе
2. Рендерим html
3. Засовываем в кеш
4. Выдаем ответ

приходит вторй запрос
1. проверяем кеш
2. отдаем ответ

В асинхронном будет так
1. Делаем запрос к базе
2. И тут приходит второй запрос
Кеш мы еще отдать не можем, т.к. мы еще даже не получили ответа от базы. И второй раз сделать запрос мы тоже не можем, потому, что при большом количестве таких запросов наша база умерт.
В node.js я например делаю так, при первом запросе создаю promise кэша. Кода приходит кторой запрос, возвращаю этот promise. И когда отработает запрос к БД и отрендериться html отдам оба ответа. В терминах Торнады не знаю как это будет, т.к. мало с ней работал.
Ответ написан
Комментировать
@devel787
Можете попробовать посмотреть доклад PyCon Ukraine 2014: REALTIME WEB: MYTH OR REALITY
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы