Python için istemci kitaplığı, varsayılan zaman aşımı değerlerini belirtmez ve gRPC aktarım katmanında varsayılan değerler belirtilmez. Varsayılan olarak, Python için istemci kitaplığı zaman aşımı davranışını sunucuya devreder.
Bu varsayılan ayar çoğu kullanım alanı için uygundur. Ancak istemci tarafı zaman aşımı belirtmeniz gerekiyorsa Python istemci kitaplığı, hem akış hem de tekli çağrılar için istek başına zaman aşımı geçersiz kılma işlemlerini (saniye cinsinden int veya float olarak belirtilir) destekler. Müşteri genelinde varsayılan zaman aşımları google-ads.yaml içinde yapılandırılamaz.
Özel bir zaman aşımı süresini 2 saat (7.200 saniye) veya daha uzun olarak ayarlayabilirsiniz ancak API, çok uzun süren isteklerde zaman aşımına uğramaya devam edebilir ve DEADLINE_EXCEEDED gRPC durum hatası döndürebilir. Bu durum sorun yaratırsa sorguyu daha küçük parçalara ayırıp bunları paralel olarak yürütün. Böylece uzun süren bir isteğin başarısız olması ve kurtarmanın tek yolunun isteği baştan başlatmak olması önlenir.
Yayın çağrısı zaman aşımları
Yanıt akışı kullanan tek Google Ads API hizmet yöntemi GoogleAdsService.SearchStream yöntemidir.
Varsayılan zaman aşımını geçersiz kılmak için yöntemi çağırırken timeout parametresini (saniye cinsinden) iletin:
def make_server_streaming_call( client: GoogleAdsClient, customer_id: str ) -> None: """Makes a server streaming call using a custom client timeout. Args: client: An initialized GoogleAds client. customer_id: The str Google Ads customer ID. """ ga_service: GoogleAdsServiceClient = client.get_service("GoogleAdsService") campaign_ids: List[str] = [] try: search_request: SearchGoogleAdsStreamRequest = client.get_type( "SearchGoogleAdsStreamRequest" ) search_request.customer_id = customer_id search_request.query = _QUERY stream: Iterator[SearchGoogleAdsStreamResponse] = ( ga_service.search_stream( request=search_request, # When making any request, an optional "timeout" parameter can be # provided to specify a client-side response deadline in seconds. # If not set, then no timeout will be enforced by the client and # the channel will remain open until the response is completed or # severed, either manually or by the server. timeout=_CLIENT_TIMEOUT_SECONDS, ) ) batch: SearchGoogleAdsStreamResponse for batch in stream: row: GoogleAdsRow for row in batch.results: campaign_ids.append(row.campaign.id) print("The server streaming call completed before the timeout.") except DeadlineExceeded: print("The server streaming call did not complete before the timeout.") sys.exit(1) except GoogleAdsException as ex: print( f"Request with ID '{ex.request_id}' failed with status " f"'{ex.error.code().name}' and includes the following errors:" ) for error in ex.failure.errors: print(f"\tError with message '{error.message}'.") if error.location: for field_path_element in error.location.field_path_elements: print(f"\t\tOn field: {field_path_element.field_name}") sys.exit(1) print(f"Total # of campaign IDs retrieved: {len(campaign_ids)}")
Tekli arama zaman aşımları
Google Ads API hizmet yöntemlerinin çoğu tekli çağrıları kullanır. Tipik örnekler GoogleAdsService.Search ve GoogleAdsService.Mutate yöntemleridir.
Tekli bir çağrı için varsayılan son tarih ve yeniden deneme ayarlarını geçersiz kılmak üzere retry parametresini kullanarak bir google.api_core.retry.Retry nesnesi iletin (veya tek denemeli zaman aşımı için timeout saniye olarak iletin):
def make_unary_call(client: GoogleAdsClient, customer_id: str) -> None: """Makes a unary call using a custom client timeout. Args: client: An initialized GoogleAds client. customer_id: The Google Ads customer ID. """ ga_service: GoogleAdsServiceClient = client.get_service("GoogleAdsService") campaign_ids: List[str] = [] try: search_request: SearchGoogleAdsRequest = client.get_type( "SearchGoogleAdsRequest" ) search_request.customer_id = customer_id search_request.query = _QUERY results: Iterator[GoogleAdsRow] = ga_service.search( request=search_request, # When making any request, an optional "retry" parameter can be # provided to specify its retry behavior. Complete information about # these settings can be found here: # https://googleapis.dev/python/google-api-core/latest/retry.html retry=Retry( # Sets the maximum accumulative timeout of the call; it # includes all tries. deadline=_CLIENT_TIMEOUT_SECONDS, # Sets the timeout that is used for the first try to one tenth # of the maximum accumulative timeout of the call. # Note: This overrides the default value and can lead to # RequestError.RPC_DEADLINE_TOO_SHORT errors when too small. We # recommend changing the value only if necessary. initial=_CLIENT_TIMEOUT_SECONDS / 10, # Sets the maximum timeout that can be used for any given try # to one fifth of the maximum accumulative timeout of the call # (two times greater than the timeout that is needed for the # first try). maximum=_CLIENT_TIMEOUT_SECONDS / 5, ), ) row: GoogleAdsRow for row in results: campaign_ids.append(row.campaign.id) print("The unary call completed before the timeout.") except DeadlineExceeded: print("The unary call did not complete before the timeout.") sys.exit(1) except GoogleAdsException as ex: print( f"Request with ID '{ex.request_id}' failed with status " f"'{ex.error.code().name}' and includes the following errors:" ) for error in ex.failure.errors: print(f"\tError with message '{error.message}'.") if error.location: for field_path_element in error.location.field_path_elements: print(f"\t\tOn field: {field_path_element.field_name}") sys.exit(1) print(f"Total # of campaign IDs retrieved: {len(campaign_ids)}")