برامج تكرار البث

عند استدعاء GoogleAdsService.search_stream، يتم عرض مكرّر استجابة البث. يجب أن يظل برنامج التكرار هذا في نطاق عميل GoogleAdsService نفسه أثناء استخدامه لتجنُّب تعطُّل عمليات البث أو أخطاء في التقسيم. ويرجع ذلك إلى أنّ كائن gRPC Channel يتم جمع البيانات غير المهمة بعد خروج كائن GoogleAdsService المفتوح عن النطاق. إذا لم يعُد الكائن GoogleAdsService ضمن النطاق بحلول وقت حدوث التكرار في نتيجة search_stream، قد يكون العنصر Channel قد تم إتلافه، ما يؤدي إلى حدوث سلوك غير محدّد عندما يحاول المكرّر استرداد القيمة التالية.

يعرض الرمز التالي الاستخدام غير الصحيح لمكررات البث:

def stream_response(client, customer_id, query):
    return client.get_service("GoogleAdsService", version="v16").search_stream(customer_id, query=query)

def main(client, customer_id):
    query = "SELECT campaign.name FROM campaign LIMIT 10"
    response = stream_response(client, customer_id, query=query)
    # Access the iterator in a different scope from where the service object was created.
    try:
        for batch in response:
            # Iterate through response, expect undefined behavior.

في الرمز أعلاه، يتم إنشاء الكائن GoogleAdsService ضمن نطاق مختلف عن نطاق الوصول إلى المكرّر. نتيجةً لذلك، قد يتم إتلاف الكائن Channel قبل أن يستهلك المكرّر الاستجابة بأكملها.

بدلاً من ذلك، يجب أن يبقى برنامج تكرار البث في نطاق برنامج GoogleAdsService نفسه ما دام يتم استخدامه:

def main(client, customer_id):
    ga_service = client.get_service("GoogleAdsService", version="v16")
    query = "SELECT campaign.name FROM campaign LIMIT 10"
    response = ga_service.search_stream(customer_id=customer_id, query=query)
    # Access the iterator in the same scope as where the service object was created.
    try:
        for batch in response:
            # Successfully iterate through response.