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","."]
docstr: Tell the file pusher that a file's changed and should be uploaded.
  
  Arguments:
      save_name: string logical location of the file relative to the run
          directory.
      path: actual string path of the file to upload on the filesystem.
docstr_tok: ["Tell","the","file","pusher","that","a","file","'s","changed","and","should","be","uploaded",".","Arguments",":","save_name",":","string","logical","location","of","the","file","relative","to","the","run","directory",".","path",":","actual","string","path","of","the","file","to","upload","on","the","filesystem","."]
code: def file_changed(
      self, save_name: LogicalPath, path: str, copy: bool = True
  ):
      """Tell the file pusher that a file's changed and should be uploaded.
  
      Arguments:
          save_name: string logical location of the file relative to the run
              directory.
          path: actual string path of the file to upload on the filesystem.
      """
      # Tests in linux were failing because wandb-events.jsonl didn't exist
      if not os.path.exists(path) or not os.path.isfile(path):
          return
      if os.path.getsize(path) == 0:
          return
  
      event = step_checksum.RequestUpload(path, save_name, copy)
      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 6 for calling the FilePusher obj's underlying member method code with example usage: obj.file_changed(save_name, path, copy) without return types