Skip to content
SON BLOG
Go back

Qdrant Async API — Python 비동기 벡터 검색 클라이언트 활용

Edit page

Python 생태계는 비동기 프로그래밍(async/await) 을 표준으로 빠르게 받아들이고 있다.

FastAPI·Quart 같은 현대적 웹 프레임워크나 Cohere SDK 등 SaaS ML 모델 클라이언트도 모두 비동기 API를 제공한다.

데이터베이스 역시 네트워크를 통한 IO-bound 작업이므로, 비동기로 처리하면 대기 시간 동안 스레드를 점유하지 않아 동시성을 크게 높일 수 있다.

언제 Async API를 써야 하는가

상황선택
단발성 스크립트·배치처럼 동시 사용자가 없는 경우동기 API도 무방
FastAPI 등 ASGI 웹 서비스·챗봇처럼 요청이 동시에 들어오는 경우AsyncQdrantClient 사용 권장

동기 코드 내에서는 await를 사용할 수 없고, 비동기 컨텍스트에서 동기 IO를 호출하면 이벤트 루프가 블로킹되므로 혼용은 지양해야 한다.

기본 사용 패턴

  1. AsyncQdrantClient 인스턴스를 생성한다.

  2. 모든 Qdrant 호출 앞에 await 를 붙인다.

  3. 진입점은 async 함수로 작성하고, 모듈 최상위에서 asyncio.run() 으로 실행한다.

import asyncio
from qdrant_client import AsyncQdrantClient, models

async def main():
    # 1) 비동기 클라이언트 생성
    client = AsyncQdrantClient("http://localhost:6333")

    # 2) 컬렉션 생성
    await client.create_collection(
        collection_name="my_collection",
        vectors_config=models.VectorParams(size=4, distance=models.Distance.COSINE),
    )

    # 3) 데이터 삽입
    await client.upsert(
        collection_name="my_collection",
        points=[
            models.PointStruct(
                id="5c56c793-69f3-4fbf-87e6-c4bf54c28c26",
                payload={"color": "red"},
                vector=[0.9, 0.1, 0.1, 0.5],
            )
        ],
    )

    # 4) 질의
    result = await client.query_points(
        collection_name="my_collection",
        query=[0.9, 0.1, 0.1, 0.5],
        limit=2,
    )
    print(result.points)

# 5) 이벤트 루프 실행
asyncio.run(main())

AsyncQdrantClient 는 동기 버전(QdrantClient)과 메서드 시그니처가 동일하므로, 기존 동기 코드베이스를 마이그레이션할 때

정도만 해주면 된다.

유의 사항

비동기 API를 사용하면 스레드 블로킹 없이 데이터베이스·외부 API 호출을 병렬로 처리할 수 있으므로, Python 웹 서비스의 처리량과 응답성을 크게 개선할 수 있다. Qdrant의 AsyncQdrantClient 를 적극 활용하여 고성능 비동기 애플리케이션을 구축하기 바란다.


Edit page
Share this post:

Previous Post
Qdrant Points — 벡터 데이터 CRUD와 Payload 필터링 가이드
Next Post
Qdrant + LangChain 연동 — 벡터 스토어와 Retriever 설정 가이드