Khi gọi
GoogleAdsService.search_stream
!
một trình lặp phản hồi truyền trực tuyến được trả về. Trình lặp này sẽ vẫn nằm trong
có cùng phạm vi như ứng dụng GoogleAdsService
trong khi được sử dụng để tránh
luồng bị hỏng hoặc lỗi phân đoạn. Nguyên nhân là do đối tượng Channel
gRPC
được thu thập rác sau khi đối tượng GoogleAdsService
đang mở nằm ngoài phạm vi.
Nếu đối tượng GoogleAdsService
không còn nằm trong phạm vi tại thời điểm lặp lại
xảy ra trên kết quả của search_stream
, thì đối tượng Channel
có thể đã
bị huỷ bỏ, 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 đúng đối với biến lặp truyền trực tuyến:
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.
Trong mã trên, đối tượng GoogleAdsService
được tạo trong một
từ nơi truy cập biến lặp. Do đó, đối tượng Channel
có thể
bị huỷ trước khi biến 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 vẫn nằm trong cùng phạm vi với
Ứng dụng GoogleAdsService
trong suốt thời gian hoạt động:
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.