docs: def async_process(funcs, *args, executor=False, sol=None, callback=None, **kw):
      """
      Execute `func(*args)` in an asynchronous parallel process.
  
      :param funcs:
          Functions to be executed.
      :type funcs: list[callable]
  
      :param args:
          Arguments to be passed to first function call.
      :type args: tuple
  
      :param executor:
          Pool executor to run the function.
      :type executor: str | bool
  
      :param sol:
          Parent solution.
      :type sol: schedula.utils.sol.Solution
  
      :param callback:
          Callback function to be called after all function execution.
      :type callback: callable
  
      :param kw:
          Keywords to be passed to first function call.
      :type kw: dict
  
      :return:
          Functions result.
      :rtype: object
      """
      name = _executor_name(executor, sol.dsp)
      e = _get_executor(name)
      res = (e and e.process_funcs or _process_funcs)(
          name, funcs, executor, *args, **kw
      )
  
      for r in res:
          callback and callback('sol' in r, r.get('sol', r.get('res')))
          if 'err' in r:
              raise r['err']
  
      return res[-1]['res']