๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์ฝ”๋ฃจํ‹ด2

Asyncio - ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ฃผ์š” ๊ฐœ๋…ํŒŒ์ด์ฌ์˜ asyncio ๋ชจ๋“ˆ์€ ๋น„๋™๊ธฐ I/O, ์ด๋ฒคํŠธ ๋ฃจํ”„, coroutines ๋ฐ ํƒœ์Šคํฌ(task) ๊ด€๋ฆฌ ๋“ฑ์„ ํ†ตํ•ด ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ง€์›ํ•˜๋Š” ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. asyncio๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋„คํŠธ์›Œํฌ ๋ฐ ์›น ์†Œ์ผ“, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ํŒŒ์ผ I/O ๋“ฑ์˜ ์ž‘์—…์„ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.์ด๋ฒคํŠธ ๋ฃจํ”„ (Event Loop):์ด๋ฒคํŠธ ๋ฃจํ”„๋Š” ์ฝ”๋ฃจํ‹ด๊ณผ ์ฝœ๋ฐฑ์„ ๊ด€๋ฆฌํ•˜๊ณ , I/O ์ž‘์—…์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.asyncio.run() ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ด๋ฒคํŠธ ๋ฃจํ”„๋ฅผ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.์ฝ”๋ฃจํ‹ด (Coroutine):async def๋กœ ์ •์˜๋œ ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.await ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค๋ฅธ ์ฝ”๋ฃจํ‹ด์ด๋‚˜ ๋น„๋™๊ธฐ ์ž‘์—…์„ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค.ํƒœ์Šคํฌ (Task):์ฝ”๋ฃจํ‹ด์„ ์ด๋ฒคํŠธ ๋ฃจํ”„์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹จ์œ„๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค... 2024. 6. 23.
์ฝ”๋ฃจํ‹ด ์ฝ”๋ฃจํ‹ด์˜ ๊ธฐ๋ณธ ๊ฐœ๋…ํŒŒ์ด์ฌ์˜ ์ฝ”๋ฃจํ‹ด(coroutine)์€ ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์ฝ”๋ฃจํ‹ด์€ ํ•จ์ˆ˜์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ, ์‹คํ–‰ ์ค‘์— ์ผ์‹œ ์ค‘์ง€ํ•˜๊ณ  ๋‚˜์ค‘์— ๋‹ค์‹œ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋™์‹œ์„ฑ์„ ๊ด€๋ฆฌํ•˜๊ณ  I/O ์ž‘์—…์„ ๋น„๋™๊ธฐ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŒŒ์ด์ฌ์˜ ์ฝ”๋ฃจํ‹ด์€ async ๋ฐ await ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ •์˜ํ•˜๊ณ  ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค.์ •์˜: ์ฝ”๋ฃจํ‹ด ํ•จ์ˆ˜๋Š” async def ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ •์˜๋ฉ๋‹ˆ๋‹ค.ํ˜ธ์ถœ: ์ฝ”๋ฃจํ‹ด ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์‹คํ–‰๋˜์ง€ ์•Š๊ณ  ์ฝ”๋ฃจํ‹ด ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.์ผ์‹œ ์ค‘์ง€์™€ ์žฌ๊ฐœ: ์ฝ”๋ฃจํ‹ด ๋‚ด๋ถ€์—์„œ await ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค๋ฅธ ์ฝ”๋ฃจํ‹ด์„ ํ˜ธ์ถœํ•˜๊ฑฐ๋‚˜ ๋น„๋™๊ธฐ ์ž‘์—…์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค. ์ด๋•Œ ์ฝ”๋ฃจํ‹ด์€ ์ผ์‹œ ์ค‘์ง€๋˜๋ฉฐ, ํ•ด๋‹น ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋ฉด ๋‹ค์‹œ ์‹คํ–‰์„ ์žฌ๊ฐœํ•ฉ๋‹ˆ๋‹ค.  ์ฝ”๋ฃจํ‹ด์˜ ์˜ˆ์ œ๋‹ค.. 2024. 6. 23.