code: def _start_upload_job(self, event: RequestUpload) -> None:
      # Operations on a single backend file must be serialized. if
      # we're already uploading this file, put the event on the
      # end of the queue
      if event.save_name in self._running_jobs:
          self._pending_jobs.append(event)
          return
  
      if self._async_executor and event.save_fn_async is not None:
          # (The `and save_fn_async is not None` is because the async code path
          # doesn't support all uploads yet: even if the user has requested async,
          # we sometimes need to use the sync method instead.)
          self._spawn_upload_async(
              event,
              async_executor=self._async_executor,
          )
      else:
          self._spawn_upload_sync(event)
  
imports: import asyncio
  import concurrent.futures
  import logging
  import queue
  import sys
  import threading
  from typing import TYPE_CHECKING, Awaitable, Callable, MutableMapping, MutableSequence, MutableSet, NamedTuple, Optional, Union
  from wandb.errors.term import termerror
  from wandb.filesync import upload_job
  from wandb.sdk.lib.paths import LogicalPath
label_desc: Use image node_id 4 for calling the StepUpload obj's underlying member method code with example usage: obj._start_upload_job(event) without return types