TGViewer
Zen of Python Zen of Python @zen_of_python · 18.8K subscribers
Post #5019 509
Как разделить синхронный и асинхронный Python-клиенты

При переписывании akismet автор отказался от одного класса с обычными и асинхронными методами. Клиент проверяет ключ API при создании, а для этого нужен HTTP-запрос. Синхронный запрос заблокировал бы асинхронный код, а запуск проверки через async потребовал бы заранее выбрать и получить работающий цикл событий.

Решением стали отдельные SyncClient и AsyncClient. Заодно новые имена позволили оставить прежний класс Akismet устаревшим, но рабочим, чтобы пользователи могли перейти без немедленной поломки API. Названия скучные, зато состояние клиента и способ ввода-вывода больше не приходится угадывать.

Разбор переписывания библиотеки также показывает, почему набор функций оказался хуже класса: ключ, адрес сайта и результат их проверки пришлось бы хранить в скрытом общем состоянии.
More from @zen_of_python
  1. Sep 27, 2026Как запускать собственный SQL через миграции Django У models.Index нашлось необычное приме…
  2. Sep 27, 2026Как заменить цепочку isinstance на singledispatch Когда обработка типов разрастается, цепо…
  3. Sep 26, 2026Как собирать динамические фильтры Django через Q-объекты Q() представляет условие для SQL-…
  4. Sep 26, 2026Почему str.splitlines() видит больше переносов, чем чтение файла У Python два разных понят…
  5. Sep 26, 2026Как вручную разрешить ленивый импорт в Python У объекта, созданного через lazy import json…
  6. Sep 25, 2026Почему Python предупреждает о последовательности \477 и как это исправить В строках Python…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →