Docs Menu
Docs Home
/ / /
PyMongo 드라이버
/

PyMongo 비동기로 마이그레이션

중요

PyMongo 비동기 운전자 실험적입니다. 프로덕션 환경에서는 사용하지 않는 것이 좋습니다. 이 가이드 에 설명된 클래스, 메서드 및 동작은 프로덕션 출시하다 전에 변경될 수 있습니다. PyMongo Async에 문제가 발생하는 경우 문제 및 도움말 페이지에서문제를 보고하는 방법을 학습 수 있습니다.

PyMongo 비동기 운전자 PyMongo 와 모터 라이브러리를 통합한 것입니다. 이 가이드 에서는 애플리케이션 을 PyMongo 또는 모터 에서 PyMongo 비동기 운전자 로 마이그레이션 위해 수행해야 하는 변경 사항을 확인할 수 있습니다.

PyMongo 비동기 운전자 로 마이그레이션 할지, 아니면 동기식 PyMongo 계속 사용할지 결정하려면 이 섹션의 정보를 고려하세요.

다음 기준이 애플리케이션 또는 사용 사례 에 적용되는 경우 동기식 PyMongo 선호됩니다.

  • 애플리케이션 실행이 간단하거나 코드에서 비동기 호출을 사용하지 않으려는 경우

  • 애플리케이션 이 직렬 워크로드 또는 응답 시간이 매우 빠른 워크로드에 의존하는 경우

  • 애플리케이션 디버깅할 때 동기식 로직의 단순성을 선호하는 경우

다음 기준이 애플리케이션 또는 사용 사례 에 적용되는 경우 PyMongo 비동기 운전자 로 마이그레이션하는 것이 좋습니다.

  • 애플리케이션 이 동시 작업이 수천 개에 달하는 대규모 동시 작업 부하를 구현하는 경우

  • 응답을 기다리거나 데이터를 쓰는 데 오랜 시간을 소비하는 워크로드에 의존하는 애플리케이션

  • 애플리케이션 이 FastAPI와 같은 다른 비동기 라이브러리 또는 프레임워크에 의존하는 경우

경고

모터 사용 중단

PyMongo 비동기 운전자 실험적입니다. 프로덕션 환경에서는 사용하지 않는 것이 좋습니다.

모터 PyMongo 비동기 운전자 의 프로덕션 출시하다 1년 후 더 이상 사용되지 않습니다. 모터 계속 지원되는 동안 모터 사용자는 PyMongo 비동기 운전자 로 마이그레이션 하는 것이 좋습니다.

PyMongo 비동기 운전자 모터 라이브러리와 유사하게 작동하지만, 스레드 풀에 작업을 위임하는 대신 Python Asyncio를 직접 사용하므로 지연 시간 과 처리량 향상됩니다. 대부분의 경우 MotorClient 대신 AsyncMongoClient 을 사용하고 애플리케이션의 가져오기 문을 pymongo에서 가져오도록 변경하여 기존 모터 애플리케이션을 PyMongo Async로 직접 마이그레이션 할 수 있습니다.

다음 예시 는 모터 에서 읽기 및 쓰기 (write) 작업에 Motor PyMongo 클라이언트 를 사용할 경우 PyMongo 비동기와 비교했을 때 가져오기의 차이점을 보여줍니다.

# Motor client import
from motor.motor_asyncio import AsyncIOMotorClient
# PyMongo Async client import
from pymongo import AsyncMongoClient

PyMongo 비동기 운전자 에서 사용할 수 있는 비동기 메서드 목록을 보려면 비동기 메서드 섹션을 참조하세요. PyMongo 에 해당하는 모터 버전에 대해 학습 호환성 가이드 의 모터 호환성 섹션을 참조하세요.

다음 섹션에서는 모터 에서 PyMongo 비동기 운전자 로 마이그레이션할 때 애플리케이션 에서 구현 해야 하는 메서드 서명 변경 사항을 Motor 보여줍니다.PyMongo

경고

PyMongo 비동기 운전자 Tornado를 지원 하지 않습니다.

다음 Motor PyMongo 모터 메서드 서명은 PyMongo 비동기 운전자 에서 다르게 작동합니다.

  • AsyncMongoClient.__init__() io_loop 매개 변수를 허용하지 않습니다.

  • AsyncCursor.each() PyMongo 비동기 운전자 에 존재하지 않습니다.

  • MotorGridOut.stream_to_handler() PyMongo 비동기 운전자 에 존재하지 않습니다.

  • AsyncCursor.to_list(0) PyMongo 비동기 운전자 에서는 유효하지 않습니다. 대신 to_list(None) 을(를) 사용하세요.

  • MongoClient AsyncMongoClient 은 스레드로부터 안전하지 않으며 여러 스레드에서 사용할 수 있지만 은 스레드로부터 안전하지 않으므로 단일 이벤트 루프 에서만 사용해야 합니다.

경고

모터 사용자는 PyMongo 비동기 운전자 로 전환할 때 성능 저하를 경험할 수 있습니다. 이는 스레드 기반 실행기 대신 네이티브 asyncio 작업을 사용하는 PyMongo 비동기 운전자 때문입니다. 스레드 기반 실행기는 동기식 운전자 와 성능 특성이 비슷하지만 속도가 느립니다. 즉, PyMongo 비동기 운전자 의 이전 기준에 맞지 않는 워크로드에 대해 더 나은 성능을 발휘합니다.

성능 저하가 발생하는 경우 사용 사례에 PyMongo 비동기 운전자 필요한지 확인합니다. 동기 PyMongo 가 사용 사례 더 잘 제공한다고 판단되면 비동기 호환성을 위해 과 함께 동기 운전자 사용하는 것이 asyncio.loop.run_in_executor() 좋습니다. 자세한 학습 은 이벤트 루프 API 문서를 참조하세요.

PyMongo 비동기 운전자 PyMongo 와 유사하게 동작하지만 네트워크 작업을 수행하는 모든 메서드는 코루틴이므로 대기해야 합니다. PyMongo 에서 PyMongo 비동기로 마이그레이션 하려면 다음과 같은 방법으로 코드를 업데이트 해야 합니다.

  • MongoClient 의 모든 용도를 AsyncMongoClient 로 바꿉니다.

  • 모든 비동기 메서드 호출에 await 키워드를 추가합니다.

  • 함수 내에서 비동기 메서드를 호출하는 경우 함수를 async로 표시합니다.

동기식 PyMongo 에서 PyMongo 비동기 운전자 로 마이그레이션할 때는 다음 사항에 유의하세요.

  • AsyncCursor 를 목록으로 변환하려면 비동기 cursor.to_list() 메서드를 사용해야 합니다.

  • PyMongo 비동기 운전자 의 AsyncCollection.find() 메서드는 동기식이지만 AsyncCursor을 반환합니다. 커서 를 반복하려면 async for 루프를 사용해야 합니다.

  • AsyncMongoClient 객체 connect 키워드 인수를 지원 하지 않습니다.

  • 스레드 또는 이벤트 루프 간에 AsyncMongoClient 객체를 주식 할 수 없습니다.

  • 비동기 호출에서 반환된 결과의 속성 이나 메서드에 액세스 하려면 다음 예시 와 같이 호출을 괄호로 올바르게 래핑해야 합니다.

    id = (await posts.insert_one(doc)).inserted_id

PyMongo 비동기 운전자 에서 사용할 수 있는 비동기 메서드의 전체 목록은 API 설명서를 참조하세요.

참고

앞의 API 문서에 나열되지 않은 모든 메서드는 동기식입니다.

비동기 Python 에 학습 보려면 Python Asyncio 설명서를 참조하세요.

돌아가기

업그레이드 가이드

이 페이지의 내용

  • 개요
  • 동기 및 비동기
  • 모터 에서 마이그레이션 Motor
  • 메서드 서명 변경
  • PyMongo 에서 마이그레이션
  • 비동기식 메서드
  • 추가 정보