CodeGym /์ž๋ฐ” ์ฝ”์Šค /Python SELF KO /๋น„๋™๊ธฐ ๋ฉ”์†Œ๋“œ

๋น„๋™๊ธฐ ๋ฉ”์†Œ๋“œ

Python SELF KO
๋ ˆ๋ฒจ 25 , ๋ ˆ์Šจ 2
์‚ฌ์šฉ ๊ฐ€๋Šฅ

3.1 ๋ชจ๋“ˆ asyncio

๋น„๋™๊ธฐ ์ž‘์—…์„ ์œ„ํ•œ ์Šค๋ ˆ๋“œ๋ฅผ ์ด์ œ๋Š” ์•„๋ฌด๋„ ๋งŒ๋“ค์ง€ ์•Š์•„. ๋ฌผ๋ก  ๋งŒ๋“ค ์ˆ˜๋Š” ์žˆ์ง€๋งŒ, ๊ทธ๋Ÿฐ ์ž‘์—…์€ ๋„ˆ๋ฌด ์ €์ˆ˜์ค€์ด๋ผ๊ณ  ์—ฌ๊ฒจ์ง€๊ณ  ํ”„๋ ˆ์ž„์›Œํฌ ๊ฐœ๋ฐœ์ž๋“ค๋งŒ ์‚ฌ์šฉํ•  ์ •๋„์•ผ. ๊ทธ๋งˆ์ €๋„ ์™„์ „ํžˆ ํ•„์š”ํ•  ๋•Œ๋งŒ ๊ทธ๋ ‡๊ฒŒ ํ•ด.

์ง€๊ธˆ์€ ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ, ๋™์ž‘์ž async/await ๊ทธ๋ฆฌ๊ณ  ์ฝ”๋ฃจํ‹ด๊ณผ ํƒœ์Šคํฌ๊ฐ€ ๋Œ€์„ธ์•ผ. ํ•˜์ง€๋งŒ ์ฐจ๊ทผ์ฐจ๊ทผ ์‚ดํŽด๋ณด์ž~

์—ญ์‚ฌ์ ์œผ๋กœ

์ฒ˜์Œ์— Python์—์„œ๋Š” ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ฝ”๋ฃจํ‹ด๊ณผ ์ƒ์„ฑ์ž๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์‚ฌ์šฉํ–ˆ์–ด. ๊ทธ๋Ÿฌ๋‹ค๊ฐ€ Python 3.4์—์„œ๋Š” asyncio ๋ชจ๋“ˆ์ด ๋‚˜์™”์–ด (๊ฐ€๋” async IO ๋ผ๊ณ ๋„ ๋ถˆ๋ฆฌ๋Š”๋ฐ) ์—ฌ๊ธฐ์—๋Š” ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์œ„ํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ๊ตฌํ˜„๋˜์–ด์žˆ์–ด. Python 3.5์—๋Š” async/await ๊ตฌ์กฐ๊ฐ€ ์ถ”๊ฐ€๋์ง€.

์ด์ œ ์•ฝ๊ฐ„์˜ ๋ฐฐ๊ฒฝ ์ •๋ณด๋ฅผ ์•Œ๋ ค์ค„๊ฒŒ. ๋จผ์ € ์ด๋“ค์— ๋Œ€ํ•ด ๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ•˜๊ณ , ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๊ณ , ๊ทธ ํ›„์— ๋” ์ž์„ธํžˆ ์„ค๋ช…ํ• ๊ฒŒ. ์™œ๋ƒํ•˜๋ฉด ๊ฑฐ์˜ ๋ชจ๋‘๊ฐ€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ๊ฒƒ๋“ค์„ ์ฐธ์กฐํ•˜์ง€ ์•Š๊ณ  ํ•œ ๊ฐ€์ง€๋ฅผ ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๊ธฐ๋Š” ์–ด๋ ค์›Œ.

๋ชจ๋“ˆ asyncio

๋ชจ๋“ˆ asyncio๋Š” ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด๊ณ , ํƒœ์Šคํฌ๋“ค์„ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ง€์›ํ•ด. ๋น„๋™๊ธฐ ์ž…์ถœ๋ ฅ ์ž‘์—…, ํƒ€์ด๋จธ, ์†Œ์ผ“, ์ฝ”๋ฃจํ‹ด ์‹คํ–‰ ๋ฐ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ์„ ์ง€์›ํ•˜๊ณ , ํ•˜๋‚˜ ๋˜๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ด๋ฒคํŠธ ๋ฃจํ”„์—์„œ ์ž‘๋™ํ•ด.

์ฝ”๋ฃจํ‹ด (Coroutines)

์ฝ”๋ฃจํ‹ด์€ ๋น„๋™๊ธฐ ํ•จ์ˆ˜๋กœ, async def ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ •์˜๋ผ. ์ฝ”๋ฃจํ‹ด์€ await ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ž์‹ ์˜ ์‹คํ–‰์„ ์ผ์‹œ ์ค‘๋‹จํ•  ์ˆ˜ ์žˆ์–ด, ๊ทธ ๋™์•ˆ์— ๋‹ค๋ฅธ ์ฝ”๋ฃจํ‹ด์ด ์‹คํ–‰๋  ์ˆ˜ ์žˆ์ง€.


import asyncio

# ๋น„๋™๊ธฐ ํ•จ์ˆ˜ (์ฝ”๋ฃจํ‹ด) ์ •์˜
async def main():
    print('Hello ...')
    # 1์ดˆ ๋™์•ˆ ์‹คํ–‰ ์ค‘์ง€
    await asyncio.sleep(1)
    print('... World!')

# ์ด๋ฒคํŠธ ๋ฃจํ”„์—์„œ ๋น„๋™๊ธฐ ํ•จ์ˆ˜ main() ์‹คํ–‰
asyncio.run(main())

์ด๋ฒคํŠธ ๋ฃจํ”„ (Event Loop)

์ด๋ฒคํŠธ ๋ฃจํ”„๋Š” ์ฝ”๋ฃจํ‹ด, ํƒœ์Šคํฌ ๋ฐ ๊ธฐํƒ€ ๋น„๋™๊ธฐ ์ž‘์—…์˜ ์‹คํ–‰์„ ๊ด€๋ฆฌํ•ด. asyncio.run() ํ˜ธ์ถœ์€ ์ด๋ฒคํŠธ ๋ฃจํ”„๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  ์ฝ”๋ฃจํ‹ด์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์‹คํ–‰ํ•ด.


import asyncio

async def main():
    print('Hello ...')
    await asyncio.sleep(1)
    print('... World!')

# ํ˜„์žฌ ์ด๋ฒคํŠธ ๋ฃจํ”„ ๊ฐ€์ ธ์˜ค๊ธฐ
loop = asyncio.get_event_loop()
# ์ฝ”๋ฃจํ‹ด์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์‹คํ–‰
loop.run_until_complete(main())
# ๋ชจ๋“  ํƒœ์Šคํฌ ์™„๋ฃŒ ํ›„ ์ด๋ฒคํŠธ ๋ฃจํ”„ ๋‹ซ๊ธฐ
loop.close()

ํƒœ์Šคํฌ (Tasks)

ํƒœ์Šคํฌ๋Š” ์ฝ”๋ฃจํ‹ด์„ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด. asyncio.create_task()๋‚˜ asyncio.ensure_future()๋กœ ์ƒ์„ฑ๋ผ.


import asyncio

# ์ง€์—ฐ ์‹คํ–‰๋˜๋Š” ์ฝ”๋ฃจํ‹ด ์ •์˜
async def say_after(delay, what):
    # ์ง€์ •๋œ ์‹œ๊ฐ„ ๋™์•ˆ ์‹คํ–‰ ์ค‘์ง€
    await asyncio.sleep(delay)
    print(what)

# ๋ฉ”์ธ ์ฝ”๋ฃจํ‹ด
async def main():
    # ์ฝ”๋ฃจํ‹ด์˜ ๋ณ‘๋ ฌ ์‹คํ–‰์„ ์œ„ํ•œ ํƒœ์Šคํฌ ์ƒ์„ฑ
    task1 = asyncio.create_task(say_after(1, 'hello'))
    task2 = asyncio.create_task(say_after(2, 'world'))
    
    # ๋‘ ํƒœ์Šคํฌ๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐ
    await task1
    await task2

# ๋ฉ”์ธ ์ฝ”๋ฃจํ‹ด ์‹คํ–‰
asyncio.run(main())

ํ“จ์ฒ˜ (Futures)

Future ๊ฐ์ฒด๋Š” ๋น„๋™๊ธฐ ์ž‘์—…์˜ ๊ฒฐ๊ณผ๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ๋ฏธ๋ž˜์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด. ์˜ˆ๋ฅผ ๋“ค์–ด ๋น„๋™๊ธฐ ํƒœ์Šคํฌ๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋Š”๋ฐ ์‚ฌ์šฉ๋ผ.


import asyncio

# ๊ธด ์ž‘์—…์„ ๋ชจ๋ฐฉํ•œ ์ฝ”๋ฃจํ‹ด ์ •์˜
async def long_running_task():
    print('Task started')
    # 3์ดˆ ๋™์•ˆ ์‹คํ–‰ ์ค‘์ง€
    await asyncio.sleep(3)
    print('Task finished')
    return 'Result'

# ๋ฉ”์ธ ์ฝ”๋ฃจํ‹ด
async def main():
    # ํƒœ์Šคํฌ ์™„๋ฃŒ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ธฐ ์œ„ํ•œ ํ“จ์ฒ˜ ์ƒ์„ฑ
    future = asyncio.ensure_future(long_running_task())
    # ํƒœ์Šคํฌ ์™„๋ฃŒ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ๊ฒฐ๊ณผ ํš๋“
    result = await future  
    print(f'Task result: {result}')

# ๋ฉ”์ธ ์ฝ”๋ฃจํ‹ด ์‹คํ–‰
asyncio.run(main())

3.2 ๋น„๋™๊ธฐ ํ•จ์ˆ˜ โ€” async def

๋น„๋™๊ธฐ ํ•จ์ˆ˜๋Š” ์ผ๋ฐ˜ ํ•จ์ˆ˜์™€ ๋™์ผํ•˜๊ฒŒ ์„ ์–ธ๋˜์ง€๋งŒ, def ํ‚ค์›Œ๋“œ ์•ž์— async๋ฅผ ๋ถ™์—ฌ์•ผ ํ•ด.


async def ํ•จ์ˆ˜์ด๋ฆ„(๋งค๊ฐœ๋ณ€์ˆ˜):
    ํ•จ์ˆ˜ ์ฝ”๋“œ

๋น„๋™๊ธฐ ํ•จ์ˆ˜๋Š” ์ผ๋ฐ˜ ํ•จ์ˆ˜์ฒ˜๋Ÿผ ์„ ์–ธ๋˜๊ณ  ํ˜ธ์ถœ๋˜์ง€๋งŒ ๊ฒฐ๊ณผ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ํŠน๋ณ„ํ•œ ๊ฐ์ฒด, ์ฝ”๋ฃจํ‹ด์„ ๋ฐ˜ํ™˜ํ•ด.

์ด๊ฒƒ์„ ์‹ค์ œ๋กœ ํ™•์ธํ•  ์ˆ˜๋„ ์žˆ์–ด:


import asyncio

async def main():
    print("Hello World")
            
# ์ฝ”๋ฃจํ‹ด์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋น„๋™๊ธฐ ํ•จ์ˆ˜ ํ˜ธ์ถœ
result = main()
# ๊ฒฐ๊ณผ ํƒ€์ž… ํ™•์ธ
print(type(result)) # <class 'coroutine'>

๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”๊ฑธ๊นŒ? ๋‹น์‹ ์ด ํ•จ์ˆ˜๋ฅผ async๋กœ ํ‘œ์‹œํ•  ๋•Œ, ์‚ฌ์‹ค์ƒ ์ด ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฑฐ๋ž‘ ๋น„์Šทํ•ด:


def async_decorator(func):
    # Task ๊ฐ์ฒด ์ƒ์„ฑ
    task = Task()
    # ์šฐ๋ฆฌ ํ•จ์ˆ˜ func๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ์ด๋ฅผ ์‹คํ–‰ํ•˜๊ฒŒ ํ•จ
    task.target = func  
    # ํ•ด๋‹น task ๊ฐ์ฒด๋ฅผ ์ด๋ฒคํŠธ ๋ฃจํ”„์˜ ํƒœ์Šคํฌ ํ์— ์ถ”๊ฐ€
    eventloop.add_task(task)  
    # task ๊ฐ์ฒด ๋ฐ˜ํ™˜
    return task 

๊ทธ๋ฆฌ๊ณ  ๋‹น์‹ ์˜ ์ฝ”๋“œ๋Š” ์ด์ฒ˜๋Ÿผ ๋ณ€๊ฒฝ๋ผ:


import asyncio

@async_decorator
def main():
    print("Hello World")
            
result = main()
print(type(result)) # <class 'coroutine'>

์ด ๋น„์œ ์˜ ์˜๋ฏธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์•„:

๋น„๋™๊ธฐ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ํŠน๋ณ„ํ•œ ๊ฐ์ฒด Task๊ฐ€ ์ƒ์„ฑ๋ผ, ์ด ๊ฐ์ฒด๋Š” ๋‹น์‹ ์˜ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•  ์˜ˆ์ •์ด์ง€๋งŒ, ๋ฏธ๋ž˜์˜ ์–ด๋Š ์‹œ์ ์— ์‹คํ–‰๋ ๊ฑฐ์•ผ. 0.0001 ์ดˆ ํ›„์ผ ์ˆ˜๋„ ์žˆ๊ณ , 10์ดˆ ํ›„์ผ ์ˆ˜๋„ ์žˆ์–ด.

์ด task ๊ฐ์ฒด๊ฐ€ ๋‹น์‹ ์˜ ๋น„๋™๊ธฐ ํ•จ์ˆ˜ ํ˜ธ์ถœ์˜ ๊ฒฐ๊ณผ๋กœ ์ฆ‰์‹œ ๋ฐ˜ํ™˜๋ผ.์ด๊ฒƒ์ด ๋ฐ”๋กœ ์ฝ”๋ฃจํ‹ด์ด์•ผ. ๋‹น์‹ ์˜ ๋น„๋™๊ธฐ ํ•จ์ˆ˜๋Š” ์•„์ง ์‹คํ–‰๋˜์ง€ ์•Š์•˜์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ, task ๊ฐ์ฒด(์ฝ”๋ฃจํ‹ด)๋Š” ์ด๋ฏธ ์กด์žฌํ•ด.

์™œ ์ด task ๊ฐ์ฒด(์ฝ”๋ฃจํ‹ด)๊ฐ€ ํ•„์š”ํ• ๊นŒ? ์‚ฌ์‹ค ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ์€ ๋งŽ์ง€ ์•Š์ง€๋งŒ, 3๊ฐ€์ง€ ์ผ์€ ๊ฐ€๋Šฅํ•ด:

  • ๋น„๋™๊ธฐ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๊ธฐ.
  • ๋น„๋™๊ธฐ ํ•จ์ˆ˜๊ฐ€ ๋๋‚  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๊ณ , ์ฝ”๋ฃจํ‹ด์—์„œ ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ๋ฅผ ์–ป๊ธฐ.
  • 10๊ฐœ(์–ด๋–ค ์ˆซ์ž๋“ )์˜ ๋น„๋™๊ธฐ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๊ธฐ.

์–ด๋–ป๊ฒŒ ํ•˜๋Š”์ง€๋Š” ์•„๋ž˜์—์„œ ์„ค๋ช…ํ• ๊ฒŒ.

3.3 ์—ฐ์‚ฐ์ž await

์ฝ”๋ฃจํ‹ด๊ณผ ๊ด€๋ จ๋œ ๋Œ€๋ถ€๋ถ„์˜ ์ž‘์—…์€ "๋น„๋™๊ธฐ ํ•จ์ˆ˜์˜ ์‹คํ–‰์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒƒ"์—์„œ ์‹œ์ž‘ํ•ด. ๊ทธ๋ž˜์„œ ์ด ์ž‘์—…์„ ์œ„ํ•œ ํŠน๋ณ„ํ•œ ์—ฐ์‚ฐ์ž await๊ฐ€ ์žˆ์–ด.

๋‹จ์ˆœํžˆ ์ฝ”๋ฃจํ‹ด ์•ž์— ์ด๋ฅผ ์“ฐ๋ฉด ๋ผ:


await ์ฝ”๋ฃจํ‹ด

๋˜๋Š” ๋ฐ”๋กœ ๋น„๋™๊ธฐ ํ•จ์ˆ˜ ํ˜ธ์ถœ ์•ž์— ์ž‘์„ฑํ•˜๋ฉด ๋ผ:


await ๋น„๋™๊ธฐ_ํ•จ์ˆ˜(์ธ์ˆ˜)

Python์ด ์—ฐ์‚ฐ์ž await๋ฅผ ๋งŒ๋‚ฌ์„ ๋•Œ, ํ˜„์žฌ ํ•จ์ˆ˜์˜ ์‹คํ–‰์„ ์ผ์‹œ ์ค‘์ง€ํ•˜๊ณ  ์ฝ”๋ฃจํ‹ด์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค โ€” ์ฝ”๋ฃจํ‹ด์ด ์ฐธ์กฐํ•˜๋Š” ๋น„๋™๊ธฐ ํ•จ์ˆ˜๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€.

์ค‘์š”! ์—ฐ์‚ฐ์ž await๋Š” ์˜ค์ง ๋น„๋™๊ธฐ ํ•จ์ˆ˜ ๋‚ด์—์„œ๋งŒ ๋‹ค๋ฅธ ์ฝ”๋ฃจํ‹ด ๋˜๋Š” ๋น„๋™๊ธฐ ์ž‘์—…์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์‹คํ–‰์„ ์ค‘์ง€ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ผ.

์ด๋Š” ๋น„๋™๊ธฐ ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‚ฌ์ด์˜ ์ „ํ™˜ ๊ณผ์ •์„ ๊ฐ„์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด์„œ์•ผ. await ํ˜ธ์ถœ์€ ์‹ค์ œ๋กœ "์—ฌ๊ธฐ์„œ ์–ด๋–ค ์‹œ๊ฐ„์„ ๊ธฐ๋‹ค๋ฆด๊ฑฐ๋‹ˆ๊นŒ โ€” ๋‹ค๋ฅธ ๋น„๋™๊ธฐ ํ•จ์ˆ˜๋“ค์„ ์‹คํ–‰ํ•˜์„ธ์š”"๋ผ๋Š” ์„ ์–ธ์ด์•ผ.

์˜ˆ์‹œ:


import asyncio

# ๋น„๋™๊ธฐ ํ•จ์ˆ˜ ์ •์˜
async def async_print(text):
    print(text)
        
# ๋ฉ”์ธ ๋น„๋™๊ธฐ ํ•จ์ˆ˜
async def main():
    # ๋น„๋™๊ธฐ ํ•จ์ˆ˜ ์‹คํ–‰์„ ๊ธฐ๋‹ค๋ฆฌ๊ธฐ ์œ„ํ•ด await ์‚ฌ์šฉ
    await async_print("Hello World")
        
# ๋ฉ”์ธ ์ด๋ฒคํŠธ ๋ฃจํ”„ ์‹คํ–‰ ๋ฐ ์ฝ”๋ฃจํ‹ด main() ์ˆ˜ํ–‰
asyncio.run(main()) # ๋น„๋™๊ธฐ ํ•จ์ˆ˜ ์‹คํ–‰

์‚ฌ์‹ค await ์—ฐ์‚ฐ์ž๋Š” ๋” ์˜๋ฆฌํ•˜๊ฒŒ ์ž‘๋™ํ•ด โ€” ๋น„๋™๊ธฐ ํ•จ์ˆ˜์˜ ์‹คํ–‰ ๊ฒฐ๊ณผ๋„ ๋ฐ˜ํ™˜ํ•ด ๊ทธ ํ•จ์ˆ˜์—์„œ ํ˜ธ์ถœ๋๋˜.

์˜ˆ์‹œ:


import asyncio

# ๋‘ ์ˆซ์ž๋ฅผ ๋”ํ•˜๋Š” ๋น„๋™๊ธฐ ํ•จ์ˆ˜ ์ •์˜
async def async_add(a, b):
    return a + b
        
# ๋ฉ”์ธ ๋น„๋™๊ธฐ ํ•จ์ˆ˜
async def main():
    # async_add์˜ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด await ์‚ฌ์šฉ
    sum = await async_add(100, 200)
    print(sum)
        
# ๋ฉ”์ธ ์ด๋ฒคํŠธ ๋ฃจํ”„ ์‹คํ–‰ ๋ฐ ์ฝ”๋ฃจํ‹ด main() ์ˆ˜ํ–‰
asyncio.run(main()) # ๋น„๋™๊ธฐ ํ•จ์ˆ˜ ์‹คํ–‰

๊ฒฐ๋ก ์ ์œผ๋กœ, ์—ฐ์‚ฐ์ž await๋Š”:

  • ๋‹ค๋ฅธ ์ฝ”๋ฃจํ‹ด์ด๋‚˜ ๋น„๋™๊ธฐ ์ž‘์—…์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ํ˜„์žฌ ๋น„๋™๊ธฐ ํ•จ์ˆ˜๋ฅผ ์ค‘๋‹จํ•ด.
  • ๋น„๋™๊ธฐ ์ž‘์—… ๋˜๋Š” ์ฝ”๋ฃจํ‹ด์˜ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ด.
  • ์˜ค์ง ๋น„๋™๊ธฐ ํ•จ์ˆ˜ ๋‚ด์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด.
์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION