code: def apply_async(self, func, callback=None):
      # todo allow execute f() in remote end to reduce data copy latency
      def f():
          spawned = []
          for func_obj, args, kwargs in func.items:
              spawned.append(
                  remote.spawn(func_obj, args=args, kwargs=kwargs)
              )
  
          ret = (
              remote.ExecutableTuple(spawned)
              .execute(session=self.session)
              .fetch(self.session)
          )
          callback(ret)
          return ret
  
      future = self.executor.submit(f)
      future.get = future.result
      return future
  
file_path: mars/mars/learn/contrib/joblib/backend.py
imports: import concurrent.futures
  from ....None import remote
  from ....session import get_default_session, new_session
label_desc: Use image node_id 5 for calling the MarsDistributedBackend obj's underlying member method code with example usage: obj.apply_async(func, callback) and returns: future, ret