Ararken
GoogleAdsService.search_stream
bir akış yanıt yinelemesi döndürülür. Bu yineleme
aynı kapsamla birlikte kullanıldığında GoogleAdsService
istemcisiyle aynı
veya segmentasyon hataları olabilir. Bunun nedeni, gRPC Channel
nesnesinin
açık GoogleAdsService
nesnesi kapsam dışına çıktıktan sonra atık toplanır.
Yineleme yapılana kadar GoogleAdsService
nesnesi artık kapsam dahilinde değilse
search_stream
sonucunda gerçekleşirse, Channel
nesnesi zaten
kaldırılır; iteratör, değeri geri almaya çalıştığında tanımlanmamış davranışa
sonraki değer.
Aşağıdaki kod, akış yinelemelerinin yanlış kullanımını göstermektedir:
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.
Yukarıdaki kodda GoogleAdsService
nesnesi farklı bir
kapsama dahil edilir. Sonuç olarak, Channel
nesnesi
Yineleme, yanıtın tamamını tüketmeden önce imha edilmelidir.
Bunun yerine, akış yinelemesi
Kullanıldığı süre boyunca GoogleAdsService
istemci:
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.