code: def _wait_for_async_processes_to_finish(
      self, card_uuid, async_timeout
  ):
      (
          _async_proc,
          _async_started,
      ) = CardProcessManager._get_card_process(card_uuid)
      while _async_proc is not None and _async_proc.poll() is None:
          if time.time() - _async_started > async_timeout:
              # This means the process has crossed the timeout and we need to kill it.
              CardProcessManager._remove_card_process(card_uuid)
              break
  
file_path: metaflow/metaflow/plugins/cards/card_creator.py
imports: import time
  import subprocess
  import tempfile
  import json
  import sys
  import os
  from metaflow import current
label_desc: Use image node_id 4 for calling the CardCreator obj's underlying member method code with example usage: obj._wait_for_async_processes_to_finish(card_uuid, async_timeout) without return types