LangChain | 비동기 배치 처리 [abatch] | 입출력 처리

박성문·2025년 1월 11일

abatch란

여러 개의 작업을 비동기적으로 동시에 처리하는 방식이다.

기본 구조

  • 동기 배치 방식인 batch와 구조는 크게 다르지않다.
    하지만 비동기 배치 방식인 abatch는 다른 비동기 처리 메서드와 같이
    async로 비동기 함수 선언, await와 asyncio.gather을 꼭 같이 써주어야한다.

동기 배치 (batch)와의 차이점

여행지 추천 웹 서비스를 예로 들면

한 사용자가 여행 관련 여러 주제를 배치로 처리해 한 번에 요청을 할 때
다른 1000명의 사용자는 자기 순번을 기다리며 앞 사람의 요청이 끝나기를 기다려야 한다

하지만 abatch의 경우에 자신의 요청을 배치 처리하는 것은 동기 배치 (batch)와 같으나
여러 사용자가 동시에 각자 자신의 요청을 다른 사용자의 요청 처리에 영향을 받지 않고 할 수 있는 것이다.

batch : 단일 사용자의 복수 주제 처리에 최적화
abatch : 다중 사용자의 동시 요청 + 복수 주제 처리에 최적화

주요 차이점

처리 방식

Batch: 한 사용자의 처리가 완료될 때까지 다른 사용자는 대기
ABatch: 여러 사용자의 요청을 동시에 처리

요청 큐

Batch: 순차적 큐 처리 (FIFO)
ABatch: 큐 없이 즉시 처리 시작

확장성

Batch: 사용자가 많아질수록 대기 시간 증가
ABatch: 사용자 수에 관계없이 즉시 처리 시작

자원 활용

Batch: 한 번에 하나의 사용자 처리
ABatch: 여러 사용자의 요청을 병렬로 처리

필수 문법 구조

메시지 포맷

비동기 처리 구문

  • agenerate는 비동기적으로 요청을 보내고 응답을 받는 메서드
    여러 프롬프트를 동시에 처리할 수 있는 비동기 생성 메서드
    generate()의 비동기 버전
    agenerate를 사용해야 GPT 처럼 여러 프롬프트를 처리해서 다중 이용자가 서비스를 이용할 수 있음
  • ainvoke, abatch, astream은 내부적으로 agenerate를 사용해서 직접 사용할 필요는 없다.

에러 핸들링

비동기 실행

논블로킹

앞서 다른 비동기 메서드의 경우처럼 논블로킹 처리
여러 사용자의 요청을 동시에 처리할 수 있다
각 요청이 독립적으로 처리되어 한 요청이 지연되더라도 다른 요청은 영향 X

profile
성문이

0개의 댓글