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 |