หมดเวลา

ไลบรารีของไคลเอ็นต์สำหรับ 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)}")