KmaClient, DataGoKrClient, ApiHubClient, ApiHubGeneratedClient๋ ๋น๋๊ธฐ ์ ์ฉ์ด๋ค. ๋คํธ์ํฌ ํธ์ถยท๋๋ฒ๊ทธ์๋ await, ํ์ด์ง ์ํ์๋ async for, ์ข ๋ฃ์๋ async with ๋๋ await client.aclose()๋ฅผ ์ฌ์ฉํ๋ค. Async ์ ๋์ฌ ํด๋์ค์ aio ํฉํฐ๋ฆฌ, a ์ ๋์ฌ ๋ฉ์๋๋ ์ ๊ฑฐํ๋ค. ๊ธฐ์กด ์ผ๋ฐ ๋ฉ์๋ ์ด๋ฆ์ ๊ทธ๋๋ก awaitํ๋ค. ForecastService์ ํธ์ถ๊ณผ now/short/vilage/version๋ async๋ค.
import asyncio
from kma import AsyncTokenBucket, KmaClient, DataGoKrClient, latest_mid_fcst_time
async def main() -> None:
budget = AsyncTokenBucket(2, capacity=1)
async with (
KmaClient.from_env(rate_limiter=budget) as weather,
DataGoKrClient.from_env(rate_limiter=budget) as client,
):
print(await weather.now(nx=60, ny=127))
async for page in (client.iter_pages(
"MidFcstInfoService", "getMidFcst", {"stnId": "108", "tmFc": latest_mid_fcst_time()}, num_of_rows=10,
)):
print(page)
asyncio.run(main())๊ธฐ๋ณธ max_rps=5.0, ๊ธฐ๋ณธ capacity=max(1, max_rps)๋ ์ด๊ธฐ burst๋ฅผ ํ์ฉํ๋ค. ์ผ์ ํ ์ก์ ๊ฐ๊ฒฉ์ capacity=1์ ์ง์ ํ๋ค. rate_limiter๋ฅผ ์ฃผ์ ํ๋ฉด max_rps๋ณด๋ค ์ฐ์ ํ๋ฉฐ, ์ฌ๋ฌ ํด๋ผ์ด์ธํธ๊ฐ ๊ฐ์ ๋ฒํท์ ๊ณต์ ํ๋ฉด ํฉ์ฐ TPS๊ฐ ์ ํ๋๋ค. ํ ์ด๋ฒคํธ ๋ฃจํ์์ ์ฌ์ฉํ๋ฉฐ, ๋๊ธฐ ์ทจ์๋ ํ ํฐ์ ์๋นํ์ง ์๋๋ค. ๊ณต๊ธ์์ ์ผ์ผ ์ฌ์ฉ๋ ์ ํ์ ๋ณ๋๋ค.
์ผ๋ฐยทํ์ ํ ์กฐํ, ๋๋ฒ๊ทธ, ํ์ด์ง, APIHub 470๊ฐ ์์ฑ ๋ฉ์๋, ํ์ ํธ์ถ์ ๊ฐ์ ๊ฒฝ๋ก๋ฅผ ์ด๋ค. ์ฒซ ์ก์ ยท์ฌ์๋ยท๊ฐ ๋ฆฌ๋ค์ด๋ ํธ๋ง๋ค ํ ํ ํฐ์ ์๋นํ๋ค. ๊ธฐ์กด 429/500/502/503/504 ๋ฐ ์ผ์์ ์ธ ์ฐ๊ฒฐยทtimeout ์ฌ์๋์ jitter/Retry-After๋ฅผ ์ ์งํ๋ฉฐ, 401/403๊ณผ resultCode=22๋ ์ฆ์ ์คํจํ๋ค. HTTPX์ BasicAuth/๊ธฐ๋ณธ ์ธ์ฆ ํ๋ฆ์ ์ง์ํ๊ณ ์ถ๊ฐ ์ก์ ์ ์จ๊ธฐ๋ Digest/custom Auth๋ ๊ฑฐ๋ถํ๋ค. ์ฌ์ฉ์ ์ ์ transport ๋ด๋ถ์ ์ถ๊ฐ ์ก์ ์ ํด๋น transport์ ์ฑ ์์ด๋ค.
๋ด๋ถ ์ธ์ ์ ์ฒซ ์์ฒญ์ ๋ง๋ค๊ณ ์ฌ์ฌ์ฉํ๋ฉฐ aclose๊ฐ ๋ซ๋๋ค. ์ฃผ์ ํ ๋น๋๊ธฐ ์ธ์ ์ ํธ์ถ์๊ฐ ๋ซ๋๋ค. ํ ํฐ ๋๊ธฐ ์ค ์ข ๋ฃ๋๊ฑฐ๋ ์ธ์ฆ ํ๋ฆ์ด ๋ฐ๋๋ฉด ์ก์ ์ ์ ๋ค์ ๊ฒ์ฌํ๋ค. ๊ณต๊ฐ ์ค๋ฅ์ DebugRun์ ๋ชจ๋ ํ๋์์ ์ค์ ํค์ ์ธ์ฝ๋ฉ๋ ํค๋ฅผ ๋ง์คํนํ๋ค.
์ผ๋ฐ ํจ์๋ก ๋จ๋ ๊ฒ์ ์ขํยท์๊ฐยท์ฝ๋ํยท๋ชจ๋ธยท์นดํ๋ก๊ทธยท์๋ต ํ์ฑยทfixture ์ ์ฅ ๋ฑ ๋ก์ปฌ ์์ ์ด๋ค. JSON/XML NO_DATA03 ๋น ๊ฒฐ๊ณผ, quota22 ๋น์ฌ์๋, tmFc ์์ฒญ๊ฐ ํด๋ฐฑ, PCP/SNO ๋ฒ์ฃผ ๋ฌธ์์ด, ํ์ด์ง ์ํ ๊ฒฝ๊ณ ์ APIHub bare query ์์๋ฅผ ์ ์งํ๋ค. CLI์ Streamlit์ ์ง์ ๊ฒฝ๊ณ์์๋ง asyncio.run์ ์ฌ์ฉํ๊ณ ์ข ๋ฃ ์ ์ธ์ ์ ๋ซ๋๋ค. ์์ฑ๊ธฐ ์ญ์ ๋น๋๊ธฐ HTTP์ ๊ณตํต TPS๋ฅผ ์ฌ์ฉํ๋ค.