현재 위치: > 최신 기사 목록> 비동기 코 루틴 실무 : 동시 파일 전송 서비스가 높은 개발 기술 분석

비동기 코 루틴 실무 : 동시 파일 전송 서비스가 높은 개발 기술 분석

M66 2025-07-10

비동기 코 루틴 및 동시 파일 전송 서비스의 개요

인터넷 기술의 빠른 개발로 파일 전송 서비스는 다양한 응용 프로그램에서 점점 더 중요한 역할을합니다. 사용자 수요가 증가하고 효율적이고 동시에 파일 전송을 달성하는 방법이 개발자의 초점이되었습니다. 비 블로킹 동시 프로그래밍 모델로서, 비동기 코 루틴은 단일 스레드 내에서 많은 수의 작업을 동시에 처리하여 시스템의 동시 처리 기능을 크게 향상시킬 수 있습니다. 이 기사는 특정 코드 예제를 결합하여 비동기식 코 루틴 기술을 사용하여 고성능 파일 전송 서비스를 작성하는 방법을 소개합니다.

기본 비동기 파일 업로드 서비스를 구축하십시오

먼저 클라이언트의 파일 업로드 요청을 처리하려면 비동기식 코 루틴 기능을 구현해야합니다. 이 함수는 클라이언트에서 비동기 적으로 데이터 스트림을 읽고 서버 로컬 파일에 기록합니다. 샘플 코드는 다음과 같습니다.

 import asyncio

async def handle_upload(reader, writer):
    data = await reader.read(1024)
    with open('upload_file.txt', 'wb') as f:
        while data:
            f.write(data)
            data = await reader.read(1024)
    writer.close()

이 예에서 핸들 _upload 함수는 차단 키워드를 통해 비동기 데이터를 읽고 차단하고 처리 효율성을 향상시킵니다.

클라이언트 요청을 들으려면 비동기 서버를 구축하십시오

다음으로 클라이언트의 연결 요청을 듣고 처리하는 데 도움이되는 비동기 기능을 작성해야합니다. 코드 예제는 다음과 같습니다.

 async def start_server():
    server = await asyncio.start_server(
        handle_upload, '127.0.0.1', 8888
    )
    await server.serve_forever()

이 함수는 asyncio.start_server를 통해 TCP 서버를 생성하고 위에서 정의 된 파일 업로드 처리 기능을 연결 콜백으로 사용하고 클라이언트 연결에 지속적으로 리스닝됩니다.

기본 서버 프로그램을 실행하십시오

메인 프로그램 입구에서 이벤트 루프를 받고 서버를 시작하십시오.

 if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    try:
        loop.run_until_complete(start_server())
    except KeyboardInterrupt:
        pass
    finally:
        loop.close()

Keyboardinterrupt는 여기에서 캡처되어 서버를 우아하게 종료하고 프로그램이 안정적으로 실행되도록합니다.

시스템의 안정성을 보장하기 위해 동시 연결 수를 제한하십시오.

서버 오버로드를 피하기 위해 비동기 세부 반구를 사용하여 동시에 업로드 된 연결 수를 제한 할 수 있습니다.

 uploads_semaphore = asyncio.Semaphore(100)

async def handle_upload(reader, writer):
    async with uploads_semaphore:
        data = await reader.read(1024)
        # 파일 전송 로직...

Asyncio.SemaphoreAsync를 구문과 함께 사용하여 동시에 처리 된 업로드 작업의 수를 제어하고 시스템 안정성을 향상시킵니다.

파일 읽기 및 쓰기 효율성 향상 : 비동기 IO 실습

파일 전송 속도를 더욱 향상시키기 위해 비동기 파일 작동 라이브러리 Aiofile을 사용하여 비 블로킹 판독 및 쓰기를 달성 할 수 있습니다.

 from aiofile import AIOFile

async def handle_upload(reader, writer):
    data = await reader.read(1024)
    async with AIOFile('upload_file.txt', 'wb') as afp:
        while data:
            await afp.write(data)
            data = await reader.read(1024)
    writer.close()

Aiofile을 통해 파일 읽기 및 쓰기 작업은 비동기 프로세스가되고 I/O 성능의 장점을 극대화하고 전송 시간을 단축합니다.

요약 및 전망

이 기사는 비동기식 코 루틴 개발 아이디어를 결합하여 기본적인 비동기 업로드 서비스 구성, 서버 모니터링 메커니즘, 동시 연결 제어 및 비동기 파일 작동 최적화를 포함하여 높은 일환 파일 전송 서비스를 구현하기위한 주요 기술을 보여줍니다. 이러한 방법을 사용하여 시스템의 동시 처리 기능 및 파일 전송 효율을 크게 향상시킬 수 있습니다. 향후 비동기 데이터베이스 드라이버 및 캐싱 전략을 결합하여 서비스 성능을 더욱 향상시키고 최적화 할 수 있습니다. 이 기사의 내용이 관련 개발 관행에 대한 유용한 참조를 제공 할 수 있기를 바랍니다.