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

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

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

def stream_response(client, customer_id, query):
    return client.get_service("GoogleAdsService", version="v22").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="v22")
    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.