ํ์ด์ฌ Generator
Coroutine
def print_name(prefix):
print("Searching prefix:{}".format(prefix))
try :
while True:
name = (yield)
if prefix in name:
print(name)
except GeneratorExit:
print("Closing coroutine!!")
print(type(print_name)) # <class 'function'>
print(type(print_name())) # <class 'generator'>
corou = print_name("Dear") # Searching prefix:Dear
corou.__next__()
corou.send("Atul")
corou.send("Dear Atul") # Dear Atul
corou.close() # Closing coroutine!!
ํด๋น ํจ์๋ ์คํ ์ generator ํด๋์ค๋ฅผ ๋ฐํํ๋ค. generator ํด๋์ค๋ก ์ผ๋ฐ์ ์ธ coroutine์ ๊ฐ๋ ์ ๊ตฌํํ ์ ์๋ค.
Native Coroutine
์ดํ๋ก ํ์ด์ฌ์, asyncio ๋ชจ๋์์ ๋น๋๊ธฐ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ Coroutine ํด๋์ค๋ฅผ ์ ๊ณตํ๋ค. ์ผ๋ฐ์ ์ธ ์ฝ๋ฃจํด์ ๊ฐ๋ ์ ์ ๋๋ ์ดํฐ๋ก ๊ตฌํํ ๊ฒ๊ณผ ๊ตฌ๋ถํ๊ธฐ ์ํด, ๋ค์ดํฐ๋ธ ์ฝ๋ฃจํด์ด๋ผ๊ณ ๋ถ๋ฅด๊ธฐ๋ ํ๋ค.
Task, Future
์ฐ๋ฆฌ๋ ๊ฐ์ฒด๊ฐ await ํํ์์์ ์ฌ์ฉ๋ ์ ์์ ๋ ์ด์จ์ดํฐ๋ธ ๊ฐ์ฒด๋ผ๊ณ ๋งํฉ๋๋ค.
๋ง์ asyncio API๋ ์ด์จ์ดํฐ๋ธ์ ๋ฐ์๋ค์ด๋๋ก ์ค๊ณ๋์์ต๋๋ค.
์ธ ๊ฐ์ง ์ฃผ์ ์ ํ์ด ์์ต๋๋ค: ์ฝ๋ฃจํด, ํ์คํฌ ๋ฐ ํจ์ฒ.
ํ์คํฌ๋ ์ฝ๋ฃจํด์ ๋์์ ์์ฝํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
์ฝ๋ฃจํด์ด asyncio.create_task()์ ๊ฐ์ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ํ์คํฌ๋ก ์ธ์ผ ๋ ์ฝ๋ฃจํด์ ๊ณง ์คํ๋๋๋ก ์๋์ผ๋ก ์์ฝ๋ฉ๋๋ค:
Future๋ ๋น๋๊ธฐ ์ฐ์ฐ์ ์ต์ข
๊ฒฐ๊ณผ๋ฅผ ๋ํ๋ด๋ ํน๋ณํ ์ ์์ค ์ด์จ์ดํฐ๋ธ ๊ฐ์ฒด์
๋๋ค.
Future ๊ฐ์ฒด๋ฅผ ๊ธฐ๋ค๋ฆด ๋, ๊ทธ๊ฒ์ ์ฝ๋ฃจํด์ด Future๊ฐ ๋ค๋ฅธ ๊ณณ์์ ํด๊ฒฐ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆด ๊ฒ์ ๋ปํฉ๋๋ค.
์ฝ๋ฐฑ ๊ธฐ๋ฐ ์ฝ๋๋ฅผ async/await์ ํจ๊ป ์ฌ์ฉํ๋ ค๋ฉด asyncio์ Future ๊ฐ์ฒด๊ฐ ํ์ํฉ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ์์ฉ ํ๋ก๊ทธ๋จ ์์ค ์ฝ๋์์ Future ๊ฐ์ฒด๋ฅผ ๋ง๋ค ํ์๋ ์์ต๋๋ค.
๋๋๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ผ๋ถ asyncio API์ ์ํด ๋
ธ์ถ๋๋ Future ๊ฐ์ฒด๋ฅผ ๊ธฐ๋ค๋ฆด ์ ์์ต๋๋ค:
'concurrent.futures' vs 'asyncio.futures'
'๐ป > ํ๋ก๊ทธ๋๋ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Youtube ์์์ ํ ์คํธ๋ก ๋ณํ (0) | 2024.06.19 |
---|---|
ํ์ด์ฌ GIL : multithreading, multiprocessing (0) | 2024.06.19 |
[programming in Scala] 01. ์ค์นผ๋ผ ํ๊ฒฝ ์ค์ (0) | 2023.08.06 |
[Go] Go for Beginners (0) | 2021.11.30 |
[ํ์ด์ฌ] Flask ์ฌ์ฉ ์ ๋์์ธ ํจํด (0) | 2021.10.27 |