Какой клиент выбрать?
TL;DR
Для подавляющего большинства случаев вам подойдет синхронный клиент Nspd
.
Если вы строите асинхронное приложение, например, в FastAPI -
используйте асинхронный клиент AsyncNspd
.
Объяснение сути асинхронного программирования выходит за рамки данной документации. Однако, если попытаться сжать все в один тезис - это способ параллельного выполнения задач, требующих больших затрат на время ожидания (например, запрос к серверу).
pynspd
предлагает оба, как синхронный, так и асинхронный клиент, что позволяет вам использовать его в любом проекте. Например, для разных API-фреймворков:
Все методы, которые доступны в синхронном клиенте Nspd
, также доступны и в асинхронном AsyncNspd
.
Однако, нужно не забывать про две важные вещи:
- всем вызовам асинхронных методов должно предшествовать ключевое слово
await
; - все вызовы асихронных методов должны осуществляться в
async
функциях.
Пример простого скрипта получения GeoJSON с НСПД, используя асинхронный API
# Стандартная библиотека для работы с `async` функциями
import asyncio
# Сторонняя библиотека - асинхронной аналог `open` для работы с файлами
import aiofiles
from pynspd import AsyncNspd
async def main():
async with AsyncNspd() as nspd:
q = input("Введите к/н: ")
feat = await nspd.search_in_theme(q)
if feat is None:
print("Ничего не найдено!")
return
async with aiofiles.open(f"{q.replace(':', '-')}.geojson", "w") as file:
await file.write(feat.model_dump_json())
if __name__ == "__main__":
# Запуск функции в event-loop
asyncio.run(main())