class_docstr: Builds target formats from the reST sources.
class_docstr_tok: ["Builds","target","formats","from","the","reST","sources","."]
code: def _read_parallel(self, docnames: list[str], nproc: int) -> None:
      chunks = make_chunks(docnames, nproc)
  
      # create a status_iterator to step progressbar after reading a document
      # (see: ``merge()`` function)
      progress = status_iterator(
          chunks,
          __("reading sources... "),
          "purple",
          len(chunks),
          self.app.verbosity,
      )
  
      # clear all outdated docs at once
      for docname in docnames:
          self.events.emit("env-purge-doc", self.env, docname)
          self.env.clear_doc(docname)
  
      def read_process(docs: list[str]) -> bytes:
          self.env.app = self.app
          for docname in docs:
              self.read_doc(docname, _cache=False)
          # allow pickling self to send it back
          return pickle.dumps(self.env, pickle.HIGHEST_PROTOCOL)
  
      def merge(docs: list[str], otherenv: bytes) -> None:
          env = pickle.loads(otherenv)
          self.env.merge_info_from(docs, env, self.app)
  
          next(progress)
  
      tasks = ParallelTasks(nproc)
      for chunk in chunks:
          tasks.add_task(read_process, chunk, merge)
  
      # make sure all threads have finished
      tasks.join()
      logger.info("")
  
imports: from __future__ import annotations
  import codecs
  import pickle
  import time
  from os import path
  from typing import TYPE_CHECKING, Any
  from docutils import nodes
  from docutils.utils import DependencyList
  from sphinx.environment import CONFIG_CHANGED_REASON, CONFIG_OK, BuildEnvironment
  from sphinx.environment.adapters.asset import ImageAdapter
  from sphinx.errors import SphinxError
  from sphinx.locale import __
  from sphinx.util import UnicodeDecodeErrorHandler, get_filetype, import_object, logging, rst
  from sphinx.util.build_phase import BuildPhase
  from sphinx.util.console import bold
  from sphinx.util.display import progress_message, status_iterator
  from sphinx.util.docutils import sphinx_domains
  from sphinx.util.i18n import CatalogInfo, CatalogRepository, docname_to_domain
  from sphinx.util.osutil import SEP, ensuredir, relative_uri, relpath
  from sphinx.util.parallel import ParallelTasks, SerialTasks, make_chunks, parallel_available
  from sphinx import directives
  from sphinx import roles
label_desc: Use image node_id 21 for calling the Builder obj's underlying member method code with example usage: obj._read_parallel(docnames, nproc) and returns: pickle