class_docstr: A thread that batches requests to our file prepare API.
  
  Any number of threads may call prepare_async() in parallel. The PrepareBatcher thread
  will batch requests up and send them all to the backend at once.
docstr: Request the backend to prepare a file for upload.
docstr_tok: ["Request","the","backend","to","prepare","a","file","for","upload","."]
code: def prepare_async(
      self, file_spec: "CreateArtifactFileSpecInput"
  ) -> "asyncio.Future[ResponsePrepare]":
      """Request the backend to prepare a file for upload."""
      response: asyncio.Future[ResponsePrepare] = asyncio.Future()
      self._request_queue.put(
          RequestPrepare(
              file_spec, (asyncio.get_event_loop(), response)
          )
      )
      return response
  
imports: import asyncio
  import functools
  import queue
  import threading
  import time
  from typing import TYPE_CHECKING, Callable, Dict, List, Mapping, NamedTuple, Optional, Sequence, Tuple, Union
label_desc: Use image node_id 4 for calling the StepPrepare obj's underlying member method code with example usage: obj.prepare_async(file_spec) and returns: response