code: def _execute_module(self, module_name=None, module_args=None, tmp=None,
                          task_vars=None, persist_files=False,
                          delete_remote_tmp=True, wrap_async=False):
          
          if module_name is None:
              module_name = self._task.action
          if module_args is None:
              module_args = self._task.args
          if task_vars is None:
              task_vars = {}
  
          self._update_module_args(module_name, module_args, task_vars)
          env = {}
          self._compute_environment_string(env)
          self._temp_file_gibberish(module_args, wrap_async)
  
          self._connection._connect()
          result = ansible_mitogen.planner.invoke(
              ansible_mitogen.planner.Invocation(
                  action=self,
                  connection=self._connection,
                  module_name=mitogen.core.to_text(module_name),
                  module_args=mitogen.utils.cast(module_args),
                  task_vars=task_vars,
                  templar=self._templar,
                  env=mitogen.utils.cast(env),
                  wrap_async=wrap_async,
                  timeout_secs=self.get_task_timeout_secs(),
              )
          )
  
          if ansible.__version__ < '2.5' and delete_remote_tmp and \
                  getattr(self._connection._shell, 'tmpdir', None) is not None:
              # Built-in actions expected tmpdir to be cleaned up automatically
              # on _execute_module().
              self._remove_tmp_path(self._connection._shell.tmpdir)
  
          return result
docs: Collect up a module's execution environment then use it to invoke
          target.run_module() or helpers.run_module_async() in the target
          context.