Python

[Python] aiofiles - 비동기 파일 작업

비번변경 2025. 4. 17. 15:24

개요

Python으로 비동기 프로그래밍을 진행 중인데, 프로그램 결과 파일을 생성해야 한다. 그런데 Python에서 파일을 다룰 때 사용하는 open 함수는 비동기를 지원하지 않는다고 한다. 이 문제를 해결하기 위해 Python 비동기 프로그래밍으로 파일 작업을 할 수 있도록 지원해 주는 ailfiles라는 라이브러리 사용 방법을 알아본다.

 

 

aiofiles

aiofiles은 비동기 애플리케이션에서 로컬 디스크의 파일을 처리하기 위해 Python으로 작성한 Apache 2 라이센스의 라이브러리다.

일반적으로 로컬 파일 IO는 블로킹이기 때문에 쉽게 비동기 방식으로 수행할 수 없다. 다시 말해 파일 IO 수행은 비동기 애플리케이션에 영향을 줄 수 있기 때문에, 실행 중인 스레드를 차단해서는 안 된다. 하지만 aiofiles는 별도의 스레드 풀에 작업을 위임하는 비동기 방식을 도입하여 비동기 파일 IO를 지원한다.

aiofiles은 Python 표준 파일 API와 유사하며, 버퍼링된 바이너리 파일, 버퍼링 되지 않은 바이너리 파일, 버퍼링 된 텍스트 파일을 지원한다. 또한 async / await을 지원한다는 특징을 갖고 있다.

 

 

설치

aiofiles는 아래와 같이 pip를 통해 설치할 수 있다.

pip install aiofiles

 

 

임포트

사용할 때는 다음과 같이 import하여 사용한다.

import aiofiles

 

 

파일 쓰기

비동기 방식으로 파일을 작성하거나 읽을 때는 비동기 콘텍스트 매니저를 사용해 파일을 열어야 한다.

파일을 쓸 때는 write 함수를 사용한다.

import asyncio
import aiofiles

async def main():
    async with aiofiles.open('test.txt', mode='w') as f:
        await f.write('hello, world!')

if __name__ == '__main__':
    asyncio.run(main())

실행하면 아래와 같이 text.txt 라는 파일이 작성된 모습을 확인할 수 있다.

 

 

파일 읽기

파일을 읽을 때는 read 함수를 사용한다.

import asyncio
import aiofiles

async def main():
    async with aiofiles.open('test.txt', mode='r') as f:
        text = await f.read()
        print(text)

if __name__ == '__main__':
    asyncio.run(main())

간단하게 비동기 방식으로 파일 작업을 수행할 수 있다.

 

 

참고  문서

https://github.com/Tinche/aiofiles

 

 

728x90