عند الاتصال
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.