Akış İterasyonları

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.