code: def run_coroutine_threadsafe(coro, loop):
      
      if not asyncio.iscoroutine(coro):
          raise TypeError('A coroutine object is required')
      future = concurrent.futures.Future()
  
      def callback():
          try:
              _chain_future(asyncio.ensure_future(coro, loop=loop), future)
          except Exception as exc:
              if future.set_running_or_notify_cancel():
                  future.set_exception(exc)
              raise
  
      loop.call_soon_threadsafe(callback)
      return future
docs: Submit a coroutine object to a given event loop.
      Return a concurrent.futures.Future to access the result.