Khi gọi GoogleAdsService.search_stream
, một trình lặp lại phản hồi truyền trực tuyến sẽ được trả về. Trình lặp này phải vẫn trong cùng phạm vi với ứng dụng GoogleAdsService
trong khi được sử dụng để tránh truyền trực tuyến bị hỏng hoặc lỗi phân đoạn. Điều này là do đối tượng Channel
gRPC bị thu thập rác sau khi đối tượng GoogleAdsService
mở ra khỏi phạm vi.
Nếu đối tượng GoogleAdsService
không còn nằm trong phạm vi vào thời điểm xảy ra vòng lặp trên kết quả của search_stream
, thì đối tượng Channel
có thể đã bị huỷ, gây ra hành vi không xác định khi trình lặp cố gắng truy xuất giá trị tiếp theo.
Mã sau đây minh hoạ cách sử dụng không chính xác khi truyền trực tuyến các biến lặp:
def stream_response(client, customer_id, query):
return client.get_service("GoogleAdsService", version="v16").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.
Trong mã trên, đối tượng GoogleAdsService
được tạo trong một phạm vi khác với nơi bạn truy cập đối tượng biến lặp. Do đó, đối tượng Channel
có thể bị huỷ bỏ trước khi trình lặp sử dụng toàn bộ phản hồi.
Thay vào đó, trình lặp truyền trực tuyến phải vẫn ở trong cùng phạm vi như ứng dụng GoogleAdsService
trong thời gian đang được sử dụng:
def main(client, customer_id):
ga_service = client.get_service("GoogleAdsService", version="v16")
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.