Anket görevi durumu

Yapılandırılmış veri dosyaları anında oluşturulmaz. Display & Video 360, SDF'lerinizi oluşturmak için birkaç saniyeden birkaç saate kadar zaman alabilir.

Görevinizin tamamlanıp tamamlanmadığını belirlemek için işlemi düzenli olarak sdfdownloadtasks.operations.get kullanarak alın ve done alanının True olup olmadığını ve görevin tamamlanıp tamamlanmadığını kontrol edin. Bu işleme "yoklama" denir.

Görev tamamlandıysa response veya error alanı ayarlanır. error alanı doldurulursa görev başarısız olur ve başarısızlıkla ilgili ayrıntılar sonuçtaki Status nesnesinde yer alır. response alanı doldurulmuşsa Display & Video 360, SDF'leri başarıyla oluşturmuştur. Oluşturulan dosyaları response.resourceName bölümünde belirtilen konumdan indirin.

Uzun süren bir raporu kontrol eden verimsiz bir yoklama uygulaması, API isteği kotanızın büyük bir kısmını tüketir. Yeniden deneme sayısını sınırlamak ve kotayı korumak için eksponansiyel geri yükleme kullanın.

Eksponansiyel geri yüklemeyi kullanarak bir SDF indirme işlemini nasıl yoklayacağınız aşağıda açıklanmıştır:

# Provide the name of the sdfdownloadtask operation.
operation_name = operation-name

# Set the following values that control retry behavior while the operation
# is running.
# Minimum amount of time between polling requests. Defaults to 5 seconds.
min_retry_interval = 5
# Maximum amount of time between polling requests. Defaults to 5 minutes.
max_retry_interval = 5 * 60
# Maximum amount of time to spend polling. Defaults to 5 hours.
max_retry_elapsed_time = 5 * 60 * 60

# Configure the sdfdownloadtasks.operations.get request.
get_request = service.sdfdownloadtasks().operations().get(operation_name)

sleep = 0

start_time = time.time()
while True:
  # Get current status of the report.
  operation = get_request.execute()

  if "done" in operation:
    if "error" in operation:
      print(
        f'The operation finished in error with code '
        f'{operation["error"]["code"]}: {operation["error"]["message"]}')
    else:
      print(
        f'The operation completed successfully. The resulting files can be '
        f'downloaded at {operation["response"]["resourceName"]}.')
    break
  elif time.time() - start_time > max_retry_elapsed_time:
    print("SDF generation deadline exceeded.")
    break

  sleep = next_sleep_interval(sleep)
  print(
    f'Operation {operation_name} is still running, sleeping for '
    f'{sleep} seconds.')
  time.sleep(sleep)

def next_sleep_interval(previous_sleep_interval):
  """Calculates the next sleep interval based on the previous."""
  min_interval = previous_sleep_interval or min_retry_interval
  max_interval = previous_sleep_interval * 3 or min_retry_interval
  return min(max_retry_interval, random.randint(min_interval, max_interval))