class_docstr: Roughly an async equivalent of UploadJob.
  
  Important differences:
  - `run` is a coroutine
  - If `run()` fails, it falls back to the synchronous UploadJob
class_docstr_tok: ["Roughly","an","async","equivalent","of","UploadJob",".","Important","differences",":","-","`","run","`","is","a","coroutine","-","If","`","run","(",")","`","fails",",","it","falls","back","to","the","synchronous","UploadJob"]
code: def __init__(
      self,
      stats: "stats.Stats",
      api: "internal_api.Api",
      file_stream: "file_stream.FileStreamApi",
      silent: bool,
      request: "step_upload.RequestUpload",
      save_fn_async: "step_upload.SaveFnAsync",
  ) -> None:
      self._stats = stats
      self._api = api
      self._file_stream = file_stream
      self.silent = silent
      self._request = request
      self._save_fn_async = save_fn_async
  
file_path: wandb/wandb/filesync/upload_job.py
imports: import asyncio
  import logging
  import os
  from typing import TYPE_CHECKING, Optional
  import wandb
  from wandb.sdk.lib.paths import LogicalPath
label_desc: Use image node_id 1 to create a new UploadJobAsync object  with example: obj = UploadJobAsync(stats, api, file_stream, silent, request, save_fn_async)