Anket görevi durumu

Yüklenen yapılandırılmış veri dosyaları, kaynakları anında oluşturmaz veya güncellemez. Display & Video 360'ın SDF'lerinizi işlemesi ve sonuçtaki güncellemeleri yapması birkaç saniyeden birkaç saate kadar sürebilir. Çakışan kaynaklar içermemeleri koşuluyla birden fazla dosya aynı anda yüklenebilir.

Görevinizin tamamlanıp tamamlanmadığını belirlemek için işlemi düzenli olarak sdfuploadtasks.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çta elde edilen Status nesnesinde yer alır. response alanı doldurulursa alana SdfUploadTask atanır. Bu, Display & Video 360'ın yüklenen SDF'yi başarıyla işlediği anlamına gelir. Sonuç dosyalarını indirin. Bu dosyalar, SdfUploadTask.resourceName alanında belirtilen konumda yer alır.

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 yükleme işlemini nasıl yoklayacağınız aşağıda açıklanmıştır:

# Import the necessary libraries
import random
import time

# Provide the name of the sdfuploadtask 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 sdfuploadtasks.operations.get request.
get_request = service.sdfuploadtasks().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 result files can be '
        f'downloaded at {operation["response"]["resourceName"]}.')
    break
  elif time.time() - start_time > max_retry_elapsed_time:
    print("Polling 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))