Python has had async for 10 years – why isn't it more popular? 🔥 Горячее 💬 Длинная дискуссия
- Async в Python уже 10 лет, но до сих пор не стал мейнстримом.
- Причины:
- ошибки «забыл
await
», трудно отлаживать; - GIL приучил не думать о параллелизме;
- польза только при I/O-задачах, CPU-нагрузка не ускоряется;
- фреймворки не догнали: Django ORM всё ещё синхронен, Flask тоже.
- ошибки «забыл
- Классический кейс — HTTP-запросы: стартуем сотни корутин, ждём ответов, не блокируем интерпретатор.
- Но дисковый I/O, CPU-задачи и другие сценарии не так выигрывают.
- Вывод: чтобы новые фичи 3.14 (free-threading, sub-interpreters) не повторили судьбу async, нужно:
- чётко объяснять, какие задачи они решают;
- давать простые API и инструменты отладки;
- не ждать, пока экосистема «догонит», а сразу внедрять в популярные библиотеки.
Комментарии (234)
- Async в Python пришёл «слишком поздно»: к моменту появления asyncio большинство уже решали задачи I/O через forking, multiprocessing или сторонние библиотеки.
- «Цветные функции» и необходимость переписывать весь код ради async делают его «заразным» и несовместимым с существующими синхронными библиотеками.
- Сложная семантика (event-loop, await, cancellation-исключения), плохая документация и отсутствие понятных best-practice усложняют отладку и поддержку.
- Для большинства задач Python-разработчика async не критичен: WSGI/WSGI-совместимые решения, Celery, Kafka и простое горизонтальное масштабирование покрывают потребности.
- Альтернативы (trio, anyio, gevent) и другие языки (Go, Elixir) предлагают более простые модели конкурентности без «раскрашенных» функций.
Show HN: PlutoPrint – Generate PDFs and PNGs from HTML with Python
PlutoPrint — библиотека Python для генерации PDF и изображений из HTML, работает на базе PlutoBook.
Установка: pip install plutoprint
.
Основные возможности
- HTML → PDF/PNG/JPEG — одна строка кода.
- CSS/JS — полная поддержка современных стандартов.
- Шаблоны — Jinja2, Django, Flask и др.
- Пакетная обработка — асинхронный режим.
- Docker-образ для быстрого деплоя.
Быстрый старт
from plutoprint import PlutoPrint
pp = PlutoPrint()
pp.html_to_pdf("report.html", "report.pdf")
Параметры
format
: pdf, png, jpegwidth/height
,orientation
,margin
,header/footer
,dpi
Примеры
- Отчёты, чеки, инвойсы, почтовые этикетки, скриншоты страниц.
Лицензия
MIT.
Комментарии (30)
- Пользователи сравнивают PlutoPrint с WeasyPrint, Puppeteer и Typst: новый движок на C++ обещает быть быстрее и легче по памяти, но покрывает не весь CSS.
- Рекомендуют прогнать тесты с print-css.rocks и проверить прод-качество (проблемы с thead, page-break-inside и т.д.).
- Puppeteer даёт полную поддержку веб-платформы, но требует Chromium и много RAM, особенно для 200-500-страничных PDF.
- Есть вопросы по flexbox, SVG, оглавлению, поддержке Markdown и крэшу на macOS.
- Несколько человек рассматривают PlutoPrint как замену wkhtmltopdf и fpdf, автор открыт к спонсорству.