이 페이지에서는 표준 환경에 Python 3 런타임과 함께 기존 번들 서비스 중 하나인 Deferred API를 사용하는 방법을 설명합니다. 앱은 Python 3용 App Engine 서비스 SDK를 통해 번들 서비스에 액세스할 수 있습니다.
개요
이전에는 지연된 패키지 google.appengine.ext.deferred
가 Python 2의 웹 앱 프레임워크에 의존했습니다. 웹 앱 프레임워크가 Python 3용 App Engine 서비스 SDK에서 삭제되었으므로 Python 2 앱을 Python 3으로 업그레이드할 때 몇 가지 항목을 변경해야 합니다.
Deferred API 사용 설정
Python 3용 Deferred API를 사용 설정하기 위해 더 이상 app.yaml
파일에서 builtins.deferred
를 on
으로 설정할 필요가 없습니다. 대신 API를 사용 설정하려면 호출에서 use_deferred=True
를 wrap_wsgi_app()
으로 전달해야 합니다.
유사점 및 차이점
기본적으로 Python 3용 Deferred API에서는 Python 2와 동일한 URL /_ah/queue/deferred
및 동일한 기본 큐를 사용합니다. Cloud Tasks로 마이그레이션하는 앱의 경우 기본 큐가 자동으로 생성되지 않으며 지연된 태스크 라이브러리를 사용할 수 없습니다.
앱에서 기본 /_ah/queue/deferred
엔드포인트를 사용하는 경우 Python 3에서 deferred.defer()
를 사용하면 Python 2와 동일하게 유지됩니다.
앱에서 지연된 태스크 실행에 커스텀 URL을 사용하는 경우 Python 2용 deferred
모듈의 TaskHandler
클래스가 이 API의 Python 3 버전에서 삭제되었으므로 몇 가지 항목을 변경해야 합니다.
지연된 작업을 실행할 수 있도록 커스텀 URL을 설정하려면 앱이 deferred.Handler
클래스(Python 2에서는 deferred.TaskHandler
)에서 post
또는 run_from_request
메서드를 재정의하고 WSGI 요청 매개변수가 포함된 사전을 나타내는 environ
매개변수를 전달하면 됩니다. 그런 다음 Python 3 샘플과 같이 커스텀 엔드포인트에서 post
메서드를 호출할 수 있습니다.
요청 라우팅 및 environ
사전 액세스와 같은 Python 3 Deferred API의 엔드 투 엔드 사용량은 앱에서 마이그레이션하는 웹 프레임워크에 따라 달라집니다. 다음 섹션에서 Python 2 예시와 Python 3 예시의 코드 변경사항을 비교합니다.
Python 3 예시
다음 예시에서는 Flask 앱 및 Django 앱에서 기본 엔드포인트와 커스텀 엔드포인트를 사용하여 지연된 태스크를 실행하는 방법을 보여줍니다.
Flask
Django
프레임워크 제외
코드 샘플
이 가이드의 전체 코드 샘플을 보려면 GitHub를 참조하세요.