1. 동기(Synchronous)

동기적인 작업은 순차적으로 실행되며, 한 작업이 끝나야 다음 작업이 시작됩니다.

간단한 비유로 설명하자면, 일을 처리하는데 한 가지 작업이 끝나기를 기다리면서 그때까지 다른 작업을 처리하지 않는 것과 비슷합니다. 대표적으로 함수를 호출하면 해당 함수의 실행이 끝날 때까지 제어가 반환되지 않습니다.

 

def func1():

    print('1')
    print('2')
    print('3')


def main():
    func1()


main()

# 동기는 스택처럼 쌓임
# 호출 호출 호출 >> 맨 끝 함수부터 스택구조로 순차적으로 실행

 

import time

def nagging():
  time.sleep(1)     # 동기함수
  print('🐼')


def main():
  nagging()
  nagging()


print(f"start : {time.strftime('%X')}")
main()
print(f"end : {time.strftime('%X')}")
더보기
start : 13:16:04
🐼
🐼
end : 13:16:06

 

 

2. 비동기(Asynchronous)

비동기적인 작업은 한 작업이 시작되면 바로 다음 작업으로 넘어가며, 작업이 완료되기를 기다리지 않습니다.
이는 주로 이벤트 핸들링, 네트워크 호출, 파일 읽기/쓰기 등의 상황에서 유용합니다.
대표적인 예로 비동기 함수 호출이 있습니다.

# sleep이 동기함수 이므로 asyncio.sleep 비동기용 슬립함수를 사용


import time

import asyncio

# asycn def : 코루틴
async def nagging():        
    await asyncio.sleep(1)  # 비동기 함수
    print('🐼')


async def main():
    await asyncio.gather(
        nagging(),
        nagging()
    )

    
print(f"start : {time.strftime('%X')}")
asyncio.run(main())
print(f"end : {time.strftime('%X')}")

 

await (동기처럼 멈춰주는 역할)

await는 Python에서 비동기 프로그래밍을 할 때 사용되는 키워드로, 주로 async 함수 내에서 다른 비동기 함수의 실행을 기다리는 데에 쓰입니다. await 키워드를 사용하면 현재 실행 중인 코루틴(coroutine)이 다른 코루틴의 완료를 기다리면서 실행을 일시 중단할 수 있습니다. 비동기 함수를 정의할 때는 함수 선언 앞에 async 키워드를 붙이고, 그 안에서 다른 비동기 함수를 호출할 때는 await를 사용합니다. await는 오직 async 함수 내에서만 사용됩니다. 일반적인 동기 함수나 스크립트에서는 사용할 수 없습니다.

 

run()

asyncio.run은 Python의 asyncio 모듈에서 제공하는 함수로, Python 3.7 이후 버전에서 도입되었습니다. 이 함수는 asyncio 이벤트 루프를 생성하고 실행하는 역할을 합니다. 주로 콘솔 스크립트나 간단한 애플리케이션에서 사용됩니다.

asyncio.run(main(), debug=False)
# main(): 실행하고자 하는 비동기 함수입니다. 이 함수는 asyncio 이벤트 루프에서 실행됩니다.
# debug: 선택적 매개변수로, 디버그 모드를 설정합니다. 기본값은 False입니다.

'컴퓨터 비전 > 파이썬 기초' 카테고리의 다른 글

20. 변수 타입 어노테이션  (0) 2023.12.13
19. 파이썬 모듈  (0) 2023.12.13
18. 파이썬 예외처리  (0) 2023.12.12
17. 스페셜 메서드  (0) 2023.12.12
16. 파이썬 상속  (0) 2023.12.12