class_docstr: Parallel file upload class.
  
  This manages uploading multiple files in parallel. It will restart a given file's
  upload job if it receives a notification that that file has been modified. The
  finish() method will block until all events have been processed and all uploads are
  complete.
class_docstr_tok: ["Parallel","file","upload","class",".","This","manages","uploading","multiple","files","in","parallel",".","It","will","restart","a","given","file's","upload","job","if","it","receives","a","notification","that","that","file","has","been","modified",".","The","finish","(",")","method","will","block","until","all","events","have","been","processed","and","all","uploads","are","complete","."]
code: def store_manifest_files(
      self,
      manifest: "ArtifactManifest",
      artifact_id: str,
      save_fn: "SaveFn",
      save_fn_async: "SaveFnAsync",
  ) -> None:
      event = step_checksum.RequestStoreManifestFiles(
          manifest, artifact_id, save_fn, save_fn_async
      )
      self._incoming_queue.put(event)
  
imports: import concurrent.futures
  import logging
  import os
  import queue
  import tempfile
  import threading
  import time
  from typing import TYPE_CHECKING, Optional, Tuple
  import wandb
  import wandb.util
  from wandb.filesync import stats, step_checksum, step_upload
  from wandb.sdk.lib.paths import LogicalPath
label_desc: Use image node_id 7 for calling the FilePusher obj's underlying member method code with example usage: obj.store_manifest_files(manifest, artifact_id, save_fn, save_fn_async) without return types