Abfragestatus der Aufgabe

Durch hochgeladene Dateien mit strukturierten Daten werden Ressourcen nicht sofort erstellt oder aktualisiert. Die Verarbeitung Ihrer strukturierten Datendateien und die entsprechenden Aktualisierungen in Display & Video 360 können einige Sekunden bis mehrere Stunden dauern. Mehrere Dateien können gleichzeitig hochgeladen werden, sofern sie keine sich überschneidenden Ressourcen enthalten.

Wenn Sie feststellen möchten, ob Ihre Aufgabe abgeschlossen ist, rufen Sie den Vorgang regelmäßig mit sdfuploadtasks.operations.get ab und prüfen Sie, ob das Feld done den Wert True hat. Dieser Vorgang wird als „Polling“ bezeichnet.

Wenn die Aufgabe abgeschlossen ist, wird entweder das Feld response oder error festgelegt. Wenn das Feld error ausgefüllt ist, ist die Aufgabe fehlgeschlagen. Details zum Fehler sind im resultierenden Status-Objekt verfügbar. Wenn das Feld response ausgefüllt ist, wird dem Feld eine SdfUploadTask zugewiesen. Das bedeutet, dass die hochgeladene strukturierte Datendatei in Display & Video 360 erfolgreich verarbeitet wurde. Ergebnisdateien herunterladen: Laden Sie die Ergebnisdateien vom Speicherort herunter, der im Feld SdfUploadTask.resourceName angegeben ist.

Eine ineffiziente Polling-Implementierung, bei der ein lang andauernder Bericht geprüft wird, verbraucht einen Großteil Ihres API-Anfragekontingents. Um Wiederholungsversuche zu begrenzen und Kontingent zu sparen, verwenden Sie exponentiellen Backoff.

So fragen Sie den Status eines SDF-Uploadvorgangs mit exponentiellem Backoff ab:

# 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))