code: def submit(fn, io_loop, *args, **kwargs):
      
      future = Future()
  
      def execute():
          """Execute fn on the IOLoop."""
          try:
              result = gen.maybe_future(fn(*args, **kwargs))
          except Exception:
              # The function we ran didn't return a future and instead raised
              # an exception. Let's pretend that it returned this dummy
              # future with our stack trace.
              f = gen.Future()
              f.set_exc_info(sys.exc_info())
              on_done(f)
          else:
              result.add_done_callback(on_done)
  
      def on_done(tornado_future):
          """
          Set tornado.Future results to the concurrent.Future.
          :param tornado_future:
          """
          exception = tornado_future.exception()
          if not exception:
              future.set_result(tornado_future.result())
          else:
              future.set_exception(exception)
  
      io_loop.add_callback(execute)
  
      return future
docs: Submit Tornado Coroutine to IOLoop.current().
  
      :param fn: Tornado Coroutine to execute
      :param io_loop: Tornado IOLoop where to schedule the coroutine
      :param args: Args to pass to coroutine
      :param kwargs: Kwargs to pass to coroutine
      :returns tornado.concurrent.Future: future result of coroutine