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

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

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

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