عند استدعاء
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.