NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #457 most downloaded on PyPI
Python multiprocessing fork with improvements and bugfixes
Last release 17 days ago
17 Sep 2026
Ships fairly regularly
a new release about every 7 months
Most releases are documented
notes for 50 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
17 years old
88 releases · first in 2009
Fix pytest deprecation warning by @mrcljx in #440
Full Changelog: v4.2.4...v4.3.0
One column per quarter.
BaseException raised in pool workers instead of raising
WorkerLostError (#427)SystemExit or KeyboardInterrupt
(for example the SIGTERM sent by a hard time limit) instead of returning to
the shared inqueue, which left the blocking pool stalled once the worker was
killed while holding the inqueue lock (regression from #452)Fix pytest deprecation warning by @mrcljx in #440
Full Changelog: v4.2.4...v4.3.0rc1
Eliminate usage of 'return' in 'finally' blocks by @torarvid in #438
Ensure that task results are delivered during pool shutdown by @weetster in #435
Add codespell support (config, workflow to detect/not fix) and make it fix few typos by @yarikoptic in #416
code.co_qualname on Python >= 3.11 by @cjwatson in #423Full Changelog: v4.2.1...v4.2.2
code.co_qualname on Python >= 3.11Remove SIGUSR2 from TERMSIGS_DEAULT by @0x2b3bfa0 in #398
SIGUSR2 from TERMSIGS_DEAULT by @0x2b3bfa0 in #398Full Changelog: v4.2.0...v4.2.1
SIGUSR2 from TERMSIGS_DEAULTSwitch references to the master branch to main by @thedrow in #384
co_positions by @moaddib666 in #395Full Changelog: v4.1.0...v4.2.0
fix a python 2 to 3 compat issue which was missed earlier by @auvipy in #374
ExceptionInfo.exception should be an exception by @woutdenolf in #372
Full Changelog: v4.0.1...v4.0.2
Add support for Python 3.11 _posixsubprocess.fork_exec() arguments by @hroncok in #367
Replace deprecated threading Event.isSet with Event.is_set by @mnito in #360
Full Changelog: v3.6.4.0...v4.0.0
Issue #309: Add Python 3.9 support to spawnv_passfds()
Nothing published for this version
Nothing published for this version
Nothing published for this version
Add support of sending parent process death signal.
Add support of sending parent process death signal.
Previous fix for handling timeouts caused a problem in warm shutdowns due to use of deepcopy.
We now use a shallow copy of the cache and do so only when it is needed.
Cleanup old checks and workarounds for Python versions we no longer support.
Fix a crash when handling a timeout.
Deprecation warning with python 3.6 fixed.
Adds Process._authkey alias to .authkey for 2.7 compat.
max_memory_per_child was measured in kilobytes on Linux, but bytes on *BSD/MacOS, it's now always kilobytes.
max_memory_per_child was measured in kilobytes on Linux, but bytes on *BSD/MacOS, it's now always kilobytes.
Windows: Adds support for max_memory_per_child, but requires the
psutil package to be installed.
Fixed bug in ForkingPickler.loadbuf, where it tried to pass
a BytesIO instance directly to pickle.loads on Python 2.7.
Connection: Properly handle EINTR (Issue #191).
Connection: Properly handle EINTR (Issue #191).
Fixed bug with missing CreateProcess for Windows on Python 2.7.
Adds Process._counter for compatibility with Python <3.5.
You need Python 2.7 or later to use this version of billiard.
No longer supports Python 2.6
You need Python 2.7 or later to use this version of billiard.
Merged changes from CPython 3.5
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Pool: Timeouts will attempt to send SIGKILL, but this signal does not exist on Windows. Replaced with SIGTERM.
Pool: Exceptions in user timeout callbacks are now logged instead of crashing the pool.
Pool: Exceptions in user timeout callbacks are now logged instead of crashing the pool.
Contributed by Pierre Fersing.
Pool: Exit codes in errors were improperly being represented as signals.
Pool: .map. and .imap now working again.
Now builds on FreeBSD 10.
Contributed by Michael Fladischer.
Contributed by Michael Fladischer.
Now compiles on GNU/kFreeBSD
Contributed by Michael Fladischer.
Pool: AF_PIPE address fixed so that it works on recent Windows versions
in combination with Python 2.7.7.
Fix contributed by Joshua Tacoma.
Pool: Fix for Supervisor object has no attribute _children error.
Fix contributed by Andres Riancho.
Pool: Fixed bug with human_status(None).
Pool: shrink did not work properly if asked to remove more than 1 process.
Fixes SemLock on Python 3.4 (Issue #107) when using forking_enable(False).
Fixes SemLock on Python 3.4 (Issue #107) when using
forking_enable(False).
Pool: Include more useful exitcode information when processes exit.
Previous release was missing the billiard.py3 package from MANIFEST so the installation would not work on Python 3.
Pool: Fixed "cannot join process not started" error.
Pool: Fixed "cannot join process not started" error.
Now uses billiard.py2 and billiard.py3 specific packages that are installed depending on the python version used.
This way the installation will not import version specific modules (and possibly crash).
Fixed problem with our backwards compatible bytes wrapper (Issue #103).
Fixed problem with our backwards compatible bytes wrapper
(Issue #103).
No longer expects frozen applications to have a valid __file__
attribute.
Fix contributed by George Sibble.
Fixes compatibility with Python < 2.7.6
Fixes compatibility with Python < 2.7.6
No longer attempts to handle SIGBUS
Contributed by Vishal Vatsa.
Non-thread based pool now only handles signals:
SIGHUP, SIGQUIT, SIGTERM, SIGUSR1,
SIGUSR2.
setup.py: Only show compilation warning for build related commands.
Fixed installation for Python 3.
Fixed installation for Python 3.
Contributed by Rickert Mulder.
Pool: Fixed bug with maxtasksperchild.
Fix contributed by Ionel Cristian Maries.
Pool: Fixed bug in maintain_pool.
Fixed Unicode error when installing the distribution (Issue #89).
Fixed Unicode error when installing the distribution (Issue #89).
Daemonic processes are now allowed to have children.
But note that it will not be possible to automatically terminate them when the process exits.
See discussion at https://github.com/celery/celery/issues/1709
Pool: Would not always be able to detect that a process exited.
Windows: Fixed problem with missing WAITABANDONED_0
Windows: Fixed problem with missing WAITABANDONED_0
Fix contributed by Matthias Wagner
Windows: PipeConnection can now be inherited.
Fix contributed by Matthias Wagner
Temporary workaround for Celery maxtasksperchild issue.
Temporary workaround for Celery maxtasksperchild issue.
Fix contributed by Ionel Cristian Maries.
Now also sets multiprocessing.current_process for compatibility with loggings processName field.
multiprocessing.current_process for compatibility
with loggings processName field.Fixed compatibility with PyPy 2.1 + 2.2.
Fixed compatibility with PyPy 2.1 + 2.2.
Fixed problem in pypy detection.
Fix contributed by Tin Tvrtkovic.
Now uses ctypes.find_library instead of hardcoded path to find
the macOS CoreServices framework.
Fix contributed by Moritz Kassner.
Now works without C extension again.
Now works without C extension again.
New _billiard.read(fd, buffer, [len, ]) function
implements os.read with buffer support (new buffer API)
New pure-python implementation of Connection.send_offset.
All platforms except for Windows/PyPy/Jython now requires the C extension.
Fixed problem with Python3 and setblocking.
- Now works on Windows again.
ApplyResult.terminate() may be set to signify that the job must not be executed. It can be used in combination with Pool.terminate_job.
ApplyResult.terminate() may be set to signify that the job must not be executed. It can be used in combination with Pool.terminate_job.
Pipe/_SimpleQueue: Now supports rnonblock/wnonblock arguments to set the read or write end of the pipe to be nonblocking.
Pool: Log message included exception info but exception happened in another process so the resulting traceback was wrong.
Pool: Worker process can now prepare results before they are sent
back to the main process (using Worker.prepare_result).
Pool: New correlation_id argument to apply_async can be used to set a related id for the ApplyResult object returned:
Pool: New correlation_id argument to apply_async can be
used to set a related id for the ApplyResult object returned:
r = pool.apply_async(target, args, kwargs, correlation_id='foo') r.correlation_id 'foo'
Pool: New callback on_process_exit is called when a pool
process exits, with signature (pid, exitcode).
Contributed by Daniel M. Taub.
Pool: Improved the too many restarts detection.
Dual code base now runs on Python 2.6+ and Python 3.
Dual code base now runs on Python 2.6+ and Python 3.
No longer compatible with Python 2.5
Includes many changes from multiprocessing in 3.4.
Now uses time.monotonic when available, also including
fallback implementations for Linux and macOS.
No longer cleans up after receiving SIGILL, SIGSEGV or SIGFPE
Contributed by Kevin Blackham
Finalize and register_after_fork is now aliases to multiprocessing.
It's better to import these from multiprocessing directly now so that there aren't multiple registries.
New billiard.queues._SimpleQueue that does not use semaphores.
Pool: Can now be extended to support using multiple IPC queues.
Pool: Can now use async I/O to write to pool IPC queues.
Pool: New Worker.on_loop_stop handler can be used to add actions
at pool worker process shutdown.
Note that, like all finalization handlers, there is no guarantee that this will be executed.
Contributed by dmtaub.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Fixed ImportError in billiard._ext
Pool: Fixed regression that disabled the deadlock fix in 2.7.3.24
Pool: Fixed regression that disabled the deadlock fix in 2.7.3.24
Pool: RestartFreqExceeded could be raised prematurely.
Process: Include pid in startup and process INFO logs.
Python 3 fixes for billiard.connection.
Manager now works again.
Python 3 fixes for billiard.connection.
Fixed invalid argument bug when running on Python 3.3
Fix contributed by Nathan Wan.
Ignore OSError when setting up signal handlers.
Pool: Child processes must ignore SIGINT.
Pool: 2.7.3.24 broke support for subprocesses (Issue #48).
Pool: 2.7.3.24 broke support for subprocesses (Issue #48).
Signals that should be ignored were instead handled by terminating.
Pool: Make sure finally blocks are called when process exits due to a signal.
Pool: Make sure finally blocks are called when process exits due to a signal.
This fixes a deadlock problem when the process is killed while having acquired the shared semaphore. However, this solution does not protect against the processes being killed, a more elaborate solution is required for that. Hopefully this will be fixed soon in a later version.
Pool: Can now use GDB to debug pool child processes.
Fixes Python 3 compatibility problems.
Contributed by Albertas Agejevas.
Windows: Now catches SystemExit from setuptools while trying to build the C extension (Issue #41).
Pool: apply_async now supports a callbacks_propagate keyword argument that can be a tuple of exceptions to propagate in callbacks. (callback, errback,
Pool: apply_async now supports a callbacks_propagate keyword
argument that can be a tuple of exceptions to propagate in callbacks.
(callback, errback, accept_callback, timeout_callback).
Errors are no longer logged for OK and recycle exit codes.
This would cause normal maxtasksperchild recycled process to log an error.
Fixed Python 2.5 compatibility problem (Issue #33).
FreeBSD: Compilation now disables semaphores if Python was built without it (Issue #40).
Contributed by William Grzybowski
Fixed typo EX_REUSE -> EX_RECYCLE
Fixed typo EX_REUSE -> EX_RECYCLE
Code now conforms to new pep8.py rules.
Your coding agent can read these notes before it upgrades. Set up the MCP server →