Skip to content

Commit d21d29a

Browse files
[3.8] bpo-17140: Document multiprocessing's ThreadPool (GH-23812) (GH-23835)
Up until now, the `multiprocessing.pool.ThreadPool` class has gone undocumented, despite being a public class in multiprocessing that is included in `multiprocessing.pool.__all__`. (cherry picked from commit 84ebcf2) Co-authored-by: Matt Wozniski <[email protected]>
1 parent a3dec9d commit d21d29a

File tree

2 files changed

+41
-0
lines changed

2 files changed

+41
-0
lines changed

Doc/library/multiprocessing.rst

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2651,6 +2651,46 @@ The :mod:`multiprocessing.dummy` module
26512651
:mod:`multiprocessing.dummy` replicates the API of :mod:`multiprocessing` but is
26522652
no more than a wrapper around the :mod:`threading` module.
26532653

2654+
.. currentmodule:: multiprocessing.pool
2655+
2656+
In particular, the ``Pool`` function provided by :mod:`multiprocessing.dummy`
2657+
returns an instance of :class:`ThreadPool`, which is a subclass of
2658+
:class:`Pool` that supports all the same method calls but uses a pool of
2659+
worker threads rather than worker processes.
2660+
2661+
2662+
.. class:: ThreadPool([processes[, initializer[, initargs]]])
2663+
2664+
A thread pool object which controls a pool of worker threads to which jobs
2665+
can be submitted. :class:`ThreadPool` instances are fully interface
2666+
compatible with :class:`Pool` instances, and their resources must also be
2667+
properly managed, either by using the pool as a context manager or by
2668+
calling :meth:`~multiprocessing.pool.Pool.close` and
2669+
:meth:`~multiprocessing.pool.Pool.terminate` manually.
2670+
2671+
*processes* is the number of worker threads to use. If *processes* is
2672+
``None`` then the number returned by :func:`os.cpu_count` is used.
2673+
2674+
If *initializer* is not ``None`` then each worker process will call
2675+
``initializer(*initargs)`` when it starts.
2676+
2677+
Unlike :class:`Pool`, *maxtasksperchild* and *context* cannot be provided.
2678+
2679+
.. note::
2680+
2681+
A :class:`ThreadPool` shares the same interface as :class:`Pool`, which
2682+
is designed around a pool of processes and predates the introduction of
2683+
the :class:`concurrent.futures` module. As such, it inherits some
2684+
operations that don't make sense for a pool backed by threads, and it
2685+
has its own type for representing the status of asynchronous jobs,
2686+
:class:`AsyncResult`, that is not understood by any other libraries.
2687+
2688+
Users should generally prefer to use
2689+
:class:`concurrent.futures.ThreadPoolExecutor`, which has a simpler
2690+
interface that was designed around threads from the start, and which
2691+
returns :class:`concurrent.futures.Future` instances that are
2692+
compatible with many other libraries, including :mod:`asyncio`.
2693+
26542694

26552695
.. _multiprocessing-programming:
26562696

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Add documentation for the :class:`multiprocessing.pool.ThreadPool` class.

0 commit comments

Comments
 (0)