728x90
동기 프로그래밍
동기 프로그래밍은 작업이 순차적으로 진행된다. 한 작업이 완료될 때까지 다음 작업이 시작되지 않는다. 따라서 코드의 흐름을 쉽게 이해할 수 있다. 그러나 I/O 작업이 진행되는 동안 프로그램은 작업이 완료될 때까지 잠시 중단되게 된다.
def read_file(filename):
with open(filename, 'r') as file:
data = file.read()
return data
def main():
filenames = ['file1.txt', 'file2.txt', 'file3.txt']
for filename in filenames:
data = read_file(filename)
print(f"{filename}:\n{data}\n")
main()
위 코드는 read_file()이 파일을 순차적으로 읽는다.
비동기 프로그래밍
비동기 프로그래밍은 여러 작업을 동시에 진행할 수 있다. 즉, 특정 작업이 완료되지 않아도 다른 작업을 수행할 수 있다. 비동기 프로그래밍은 I/O 작업이 많은 프로그램에서 성능을 향상시킬 수 있다. 그러나 코드가 복잡해질 수 있으며, 디버깅이 어려울 수 있다.
import asyncio
async def read_file(filename):
loop = asyncio.get_event_loop()
data = await loop.run_in_executor(None, lambda: open(filename, 'r').read())
return data
async def main():
filenames = ['file1.txt', 'file2.txt', 'file3.txt']
tasks = [read_file(filename) for filename in filenames]
results = await asyncio.gather(*tasks)
for filename, data in zip(filenames, results):
print(f"{filename}:\n{data}\n")
asyncio.run(main())
위 코드는 read_file()이 비동기 함수로 정의되어 있다. await 키워드를 통해 파일을 읽는 작업을 비동기적으로 수행한다. 즉, 여러 파일을 동시에 읽을 수 있다.
코루틴(coroutine)
비동기 프로그래밍 예제 코드와 같이 async def를 통해 선언된 함수를 코루틴이라고 한다. 동기 프로그래밍의 함수가 호출되면 끝날 때까지 실행되지만 비동기 프로그래밍의 코루틴은 await 키워드를 통해 다른 코루틴이나 비동기 작업을 기다릴 수 있다. 다른 코루틴을 호출할 때 await 키워드가 사용되며, 다른 코루틴이 실행될 수 있도록 한다.
728x90
'Programming Languages > Python' 카테고리의 다른 글
[Python] *args와 **kwargs (2) | 2024.09.12 |
---|---|
[Python] 예외처리 / try, except, else, finally, raise (3) | 2024.09.07 |
[Python] 텔레그램 봇을 통해 메세지 송수신하기 (0) | 2024.09.05 |
[Python] subprocess를 사용하여 다른 파이썬 버전으로 코드를 실행하기 (1) | 2024.09.03 |