Виктор Сергиенко «Асинхронный io-boundpython: миф или...
TRANSCRIPT
(на самом деле, речь в основном о полезности async i/o на базах данных)
http://techspot.zzzeek.org/2015/02/15/asynchronous-python-and-databases/
Javascript был готов к async I/O
• нет многопоточности
• работа (GUI) построена на событиях
• армия опытнейших программистов.
И вот мы на сервере!
Русские шпионы украли из Пентагона последние 100 строк
каждого файла из прошивки американских ядерных ракет!
Никаких спагетти в Python!
• Генераторы Python позволяют писать асинхронный код почти так же, как синхронный.
• Теперь с asyncio!
SQLAlchemy? asyncio? Шо, да?
• Async - это не волшебная пыльца фей для производительности.
• ОК, мы не будем сравнивать тёплое с мягким. Посмотрим только с т.з. СУБД.
“Iтогi пiдведьом”
• asyncio УХУДШАЕТ связь с БД.• Для локальной БД -
катастрофически.• Проверяйте то, что вам
говорят!• Не лучше ли nginx + uWsgi?
Ответ: Jesse Jiryu Davis, автор Motor
@asyncio.coroutinedef my_query_method(): # "yield from" unblocks the event loop while # waiting for the database. result = yield from my_db.query(“query")
“Всё так. Но в асинхронных приложениях нужно разгружать event loop.Реализация драйвера может быть синхронной, нужно только асинхронное API”.
Ответ: Brett Slatkin: GAE, Google App Surveys, “Effective Python”
• What if you want to mix:• queries through SQLAlchemy • with lookups in Memcache and Redis, • and simultaneously enqueue some
background tasks with Celery?• Amdahl's law: “параллелизм может только
приблизиться ко времени выполнения самого длинного непараллельного фрагмента”
• см. ответ Джесси Дэвис.