ไลบรารีของไคลเอ็นต์สำหรับ Python ไม่ได้ระบุระยะหมดเวลาเริ่มต้น และ ค่าเริ่มต้นที่ระบุที่เลเยอร์การรับส่งข้อมูล gRPC ซึ่งหมายความว่าโดยค่าเริ่มต้น ไลบรารีของไคลเอ็นต์สำหรับ Python จะมอบสิทธิ์การทำงานให้กับเซิร์ฟเวอร์อย่างสมบูรณ์
ซึ่งเพียงพอสำหรับการใช้งานส่วนใหญ่ แต่ถ้าจำเป็นต้องระบุ การหมดเวลาฝั่งไคลเอ็นต์ ไลบรารีของไคลเอ็นต์สำหรับ Python รองรับการหมดเวลา จะลบล้างทั้งการเรียกสตรีมมิงและการเรียกเดี่ยว
คุณกำหนดระยะหมดเวลาเป็น 2 ชั่วโมงขึ้นไปได้ แต่ API อาจยังหมดเวลาอยู่
คำขอที่ทำงานมานานมากๆ และส่งคืน
DEADLINE_EXCEEDED
หากปัญหานี้กลายเป็นปัญหา คุณสามารถแบ่งคำค้นหาและเรียกใช้ส่วนต่างๆ ใน
Parallel; เพื่อหลีกเลี่ยงสถานการณ์ที่คำขอที่ทำงานเป็นเวลานานล้มเหลว และ
วิธีเดียวที่จะกู้คืนได้คือการรีสตาร์ทคำขอ
การหมดเวลาของการโทรแบบสตรีมมิง
วิธีเดียวของบริการ Google Ads API ที่ใช้การเรียกประเภทนี้คือ
GoogleAdsService.SearchStream
หากต้องการลบล้างระยะหมดเวลาเริ่มต้น คุณต้องเพิ่มพารามิเตอร์อีกเมื่อเรียกใช้ เมธอด:
def make_server_streaming_call(client, customer_id): """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 = client.get_service("GoogleAdsService") campaign_ids = [] try: search_request = client.get_type("SearchGoogleAdsStreamRequest") search_request.customer_id = customer_id search_request.query = _QUERY stream = 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, ) for batch in stream: for row in batch.results: campaign_ids.append(row.campaign.id) print("The server streaming call completed before the timeout.") except DeadlineExceeded as ex: 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)}")
ระยะหมดเวลาของการโทรแบบรวม
วิธีการบริการ Google Ads API ส่วนใหญ่จะใช้การเรียกเดี่ยว ตัวอย่างทั่วไปได้แก่
GoogleAdsService.Search
และ
GoogleAdsService.Mutate
หากต้องการลบล้างระยะหมดเวลาเริ่มต้น คุณต้องเพิ่มพารามิเตอร์อีกเมื่อเรียกใช้ เมธอด:
def make_unary_call(client, customer_id): """Makes a unary call using a custom client timeout. Args: client: An initialized GoogleAds client. customer_id: The Google Ads customer ID. """ ga_service = client.get_service("GoogleAdsService") campaign_ids = [] try: search_request = client.get_type("SearchGoogleAdsRequest") search_request.customer_id = customer_id search_request.query = _QUERY results = 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, ), ) for row in results: campaign_ids.append(row.campaign.id) print("The unary call completed before the timeout.") except DeadlineExceeded as ex: 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)}")