Saat menelepon
GoogleAdsService.search_stream
,
iterator respons streaming ditampilkan. Iterator ini harus tetap berada
cakupan yang sama dengan klien GoogleAdsService
selagi digunakan untuk menghindari
streaming yang bermasalah atau kesalahan segmentasi. Hal ini karena objek Channel
gRPC
dibersihkan sampah memorinya setelah objek GoogleAdsService
terbuka berada di luar cakupan.
Jika objek GoogleAdsService
tidak lagi berada dalam cakupan pada saat iterasi
terjadi pada hasil search_stream
, objek Channel
mungkin sudah
dihancurkan, sehingga menyebabkan perilaku yang tidak ditentukan saat iterator mencoba mengambil
nilai berikutnya.
Kode berikut menunjukkan penggunaan iterator streaming yang salah:
def stream_response(client, customer_id, query):
return client.get_service("GoogleAdsService", version="v17").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.
Dalam kode di atas, objek GoogleAdsService
dibuat dalam lingkungan
lingkup dari mana iterator diakses. Akibatnya, objek Channel
mungkin
dihancurkan sebelum iterator menggunakan seluruh respons.
Sebaliknya, iterator streaming harus tetap berada dalam cakupan yang sama dengan
GoogleAdsService
klien selama digunakan:
def main(client, customer_id):
ga_service = client.get_service("GoogleAdsService", version="v17")
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.