code: def setup_loop_in_thread() -> (
      Tuple[asyncio.AbstractEventLoop, threading.Thread]
  ):
      """Sets up a new asyncio event loop in a new thread, and runs it forever.
  
      Returns:
          A tuple containing the event loop and the thread.
      """
  
      def start_background_loop(
          loop: asyncio.AbstractEventLoop,
      ) -> None:
          asyncio.set_event_loop(loop)
          loop.run_forever()
  
      global __LOOP__
      global __THREAD__
  
      if not (__LOOP__ and __THREAD__):
          loop = asyncio.new_event_loop()
          thread = threading.Thread(
              target=start_background_loop, args=(loop,), daemon=True
          )
          thread.start()
          __LOOP__, __THREAD__ = loop, thread
      return __LOOP__, __THREAD__
  
file_path: argilla/src/argilla/utils/utils.py
imports: import asyncio
  import importlib
  import os
  import sys
  import threading
  import warnings
  from itertools import chain
  from types import ModuleType
  from typing import Any, Optional, Tuple
label_desc: Use image node_id 2 for calling a global function with example usage: setup_loop_in_thread() and returns: __LOOP__,  __THREAD__