عند استدعاء
GoogleAdsService.search_stream
،
يتم عرض أداة تكرار للردّ الذي يتم عرضه تدريجيًا. يجب أن يظلّ هذا الموسّع في
النطاق نفسه الذي يستخدمه برنامج GoogleAdsService
أثناء استخدامه لتجنُّب
توقّف أحداث البث أو حدوث أخطاء في التقسيم. ويعود السبب في ذلك إلى أنّه تتم إزالة محتوى Channel
في gRPC
بعد انتهاء صلاحية GoogleAdsService
المفتوح.
إذا لم يعُد عنصر GoogleAdsService
ضمن النطاق في وقت تكرار
الحصول على نتيجة search_stream
، قد يكون Channel
قد تم
تدميره، ما يؤدي إلى سلوك غير محدّد عندما يحاول المكرّر استرداد
القيمة التالية.
يوضّح الرمز البرمجي التالي الاستخدام غير الصحيح لمُكرّرات البث:
def stream_response(client, customer_id, query):
return client.get_service("GoogleAdsService", version="v18").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="v18")
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.