앱 엔진의 스레드 안전 클라이언트 라이브러리 (python)

졸탄 몰 나르

Google의 git 저장소 중 하나에서 bigquery 삽입에 대한 작은 샘플 코드를 찾았습니다.

https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/appengine/standard/bigquery/main.py

app.yaml이 표시되면이 코드가 스레드로부터 안전해야한다고 말하지만 클라이언트 라이브러리의 문서 ( https://developers.google.com/api-client-library/python/guide/thread_safety )에서 확인하는 경우 스레드로부터 안전하지 않아야합니다. 다음 코드가 스레드 안전 여부에 대해 약간 혼란 스럽습니까? 앱 엔진 표준 환경에서 실행 중입니다.

import pprint

from googleapiclient.discovery import build
from oauth2client.client import GoogleCredentials


credentials = GoogleCredentials.get_application_default()

# Create the bigquery api client
service = build('bigquery', 'v2', credentials=credentials)

response = service.datasets().list(projectId='PROJECTID').execute()

pprint.pprint(response)

---- 업데이트 ---- Tim의 답변 후 코드를 다음과 같이 변경했습니다. 이제 좋을 것입니다.

import pprint

from googleapiclient.discovery import build
from oauth2client.contrib.appengine import AppAssertionCredentials
import httplib2


credentials = AppAssertionCredentials(scope='https://www.googleapis.com/auth/bigquery')


# Create the bigquery api client
service = build('bigquery', 'v2')


def get():
    # authorize http object with client credentials
    http = credentials.authorize(httplib2.Http())
    response = service.datasets().list(projectId='PROJECTID').execute(http=http)

    pprint.pprint(response)
팀 호프만

참조하는 문서를 읽으면 다음과 같이 말합니다.

google-api-python-client 라이브러리는 스레드로부터 안전하지 않은 httplib2 라이브러리 위에 빌드됩니다. 따라서 다중 스레드 응용 프로그램으로 실행중인 경우 요청하는 각 스레드에는 httplib2.Http ()의 고유 한 인스턴스가 있어야합니다.

그런 다음 계속해서이를 수행하는 방법을 보여줍니다. 지침을 따르면 예입니다.

샘플 코드가 너무 간단하고 문서에 설명 된 것을 시도하지 않습니다.

# Create a new Http() object for every request
  def build_request(http, *args, **kwargs):
    new_http = httplib2.Http()
    return apiclient.http.HttpRequest(new_http, *args, **kwargs)
  service = build('api_name', 'api_version', requestBuilder=build_request)

  # Pass in a new Http() manually for every request
  service = build('api_name', 'api_version')
  http = httplib2.Http()
  service.stamps().list().execute(http=http)

따라서 스레드 상황에서 코드를 시도하면 스레드로부터 안전하지 않습니다. REPL에서 해당 코드를 시도하고 있다면 스레드 상황에있는 것 같습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Google API Python 클라이언트가 내 로컬 앱 엔진 엔드 포인트의 이전 버전을 계속 사용합니다.

분류에서Dev

AC 라이브러리의 스레드 안전성 설명

분류에서Dev

Python / Google API 클라이언트 v3 / 스레드 안전성 보장

분류에서Dev

안전한 스레드 클라이언트 라이브러리를 만들어 외부 API에 연결

분류에서Dev

Google 앱 엔진의 Google 클라우드 엔드 포인트

분류에서Dev

클라이언트-서버 안드로이드 채팅 앱-NetworkOnMainThreadException

분류에서Dev

Windows Universal / Store 앱의 클래스 라이브러리 지역화

분류에서Dev

저지 클라이언트 WebTarget 스레드 안전입니까?

분류에서Dev

Google API 자바 스크립트 클라이언트 라이브러리를 Chrome 앱에로드하는 방법

분류에서Dev

표준 라이브러리 클래스의 기능을 안전하게 확장

분류에서Dev

최신 버전의 Google 클라우드 앱 엔진 배포에 대한 URL이 있습니까?

분류에서Dev

라이브러리에 업로드 후 IOS 앱 버전 지원

분류에서Dev

Android 라이브러리 내의 모든 앱 리소스 나열

분류에서Dev

클라이언트가 응답하지 않음-Python의 다중 스레드

분류에서Dev

안정적인 릴리스의 라이브러리 버전 목록

분류에서Dev

로드 된 라이브러리의 개체 인스턴스를 라이브러리 또는 클라이언트 코드에서 삭제해야합니까?

분류에서Dev

C #의 서버 클라이언트 앱에서 클라이언트의 프로세스 ID

분류에서Dev

iOS 7 가로 전용 앱은 사진 라이브러리에 액세스 할 수 없습니다.

분류에서Dev

iOS 7 가로 전용 앱은 사진 라이브러리에 액세스 할 수 없습니다.

분류에서Dev

스레딩으로 인해 디버깅하기 어려운 포인트 클라우드 라이브러리 앱?

분류에서Dev

iOS 하이브리드 앱-iPhone 11의 안전 영역 회피

분류에서Dev

다른 솔루션의 UWP 앱에서 클래스 라이브러리 참조

분류에서Dev

Android 앱의 Cometd / Bayeux 클라이언트

분류에서Dev

ecwid-mailchimp 라이브러리 스레드는 안전합니까?

분류에서Dev

Python Pandas : 하나의 가져 오기 라이브러리에서 다른 라이브러리로 데이터 프레임 전달

분류에서Dev

Google 웹 앱 스크립트-클라이언트 측 전역 변수

분류에서Dev

OS X 앱의 소스에서 빌드 된 OpenSSL 라이브러리 사용

분류에서Dev

샘플 앱과 문서로 안드로이드 라이브러리 프로젝트를 출시하기위한 최고의 프로젝트 구조?

분류에서Dev

IBM MobileFirst 하이브리드 앱 클라이언트 측 서버 설정

Related 관련 기사

  1. 1

    Google API Python 클라이언트가 내 로컬 앱 엔진 엔드 포인트의 이전 버전을 계속 사용합니다.

  2. 2

    AC 라이브러리의 스레드 안전성 설명

  3. 3

    Python / Google API 클라이언트 v3 / 스레드 안전성 보장

  4. 4

    안전한 스레드 클라이언트 라이브러리를 만들어 외부 API에 연결

  5. 5

    Google 앱 엔진의 Google 클라우드 엔드 포인트

  6. 6

    클라이언트-서버 안드로이드 채팅 앱-NetworkOnMainThreadException

  7. 7

    Windows Universal / Store 앱의 클래스 라이브러리 지역화

  8. 8

    저지 클라이언트 WebTarget 스레드 안전입니까?

  9. 9

    Google API 자바 스크립트 클라이언트 라이브러리를 Chrome 앱에로드하는 방법

  10. 10

    표준 라이브러리 클래스의 기능을 안전하게 확장

  11. 11

    최신 버전의 Google 클라우드 앱 엔진 배포에 대한 URL이 있습니까?

  12. 12

    라이브러리에 업로드 후 IOS 앱 버전 지원

  13. 13

    Android 라이브러리 내의 모든 앱 리소스 나열

  14. 14

    클라이언트가 응답하지 않음-Python의 다중 스레드

  15. 15

    안정적인 릴리스의 라이브러리 버전 목록

  16. 16

    로드 된 라이브러리의 개체 인스턴스를 라이브러리 또는 클라이언트 코드에서 삭제해야합니까?

  17. 17

    C #의 서버 클라이언트 앱에서 클라이언트의 프로세스 ID

  18. 18

    iOS 7 가로 전용 앱은 사진 라이브러리에 액세스 할 수 없습니다.

  19. 19

    iOS 7 가로 전용 앱은 사진 라이브러리에 액세스 할 수 없습니다.

  20. 20

    스레딩으로 인해 디버깅하기 어려운 포인트 클라우드 라이브러리 앱?

  21. 21

    iOS 하이브리드 앱-iPhone 11의 안전 영역 회피

  22. 22

    다른 솔루션의 UWP 앱에서 클래스 라이브러리 참조

  23. 23

    Android 앱의 Cometd / Bayeux 클라이언트

  24. 24

    ecwid-mailchimp 라이브러리 스레드는 안전합니까?

  25. 25

    Python Pandas : 하나의 가져 오기 라이브러리에서 다른 라이브러리로 데이터 프레임 전달

  26. 26

    Google 웹 앱 스크립트-클라이언트 측 전역 변수

  27. 27

    OS X 앱의 소스에서 빌드 된 OpenSSL 라이브러리 사용

  28. 28

    샘플 앱과 문서로 안드로이드 라이브러리 프로젝트를 출시하기위한 최고의 프로젝트 구조?

  29. 29

    IBM MobileFirst 하이브리드 앱 클라이언트 측 서버 설정

뜨겁다태그

보관