Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-billiard for openSUSE:Factory
checked in at 2026-02-03 21:30:03
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-billiard (Old)
and /work/SRC/openSUSE:Factory/.python-billiard.new.1995 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-billiard"
Tue Feb 3 21:30:03 2026 rev:28 rq:1330504 version:4.2.4
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-billiard/python-billiard.changes
2025-10-28 14:47:39.329686969 +0100
+++
/work/SRC/openSUSE:Factory/.python-billiard.new.1995/python-billiard.changes
2026-02-03 21:31:21.972320094 +0100
@@ -1,0 +2,9 @@
+Sat Jan 31 09:30:51 UTC 2026 - Andreas Prittwitz <[email protected]>
+
+- Update to version 4.2.4
+ * Eliminate usage of 'return' in 'finally' blocks (#438)
+- Changes in version 4.2.3
+ Ensure that task results are delivered during pool
+ shutdown (#435)
+
+-------------------------------------------------------------------
Old:
----
billiard-4.2.2.tar.gz
New:
----
billiard-4.2.4.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-billiard.spec ++++++
--- /var/tmp/diff_new_pack.V7I7lj/_old 2026-02-03 21:31:22.648348696 +0100
+++ /var/tmp/diff_new_pack.V7I7lj/_new 2026-02-03 21:31:22.652348865 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-billiard
#
-# Copyright (c) 2025 SUSE LLC and contributors
+# Copyright (c) 2026 SUSE LLC and contributors
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
%{?sle15_python_module_pythons}
Name: python-billiard
-Version: 4.2.2
+Version: 4.2.4
Release: 0
Summary: Python multiprocessing fork
License: BSD-3-Clause
++++++ billiard-4.2.2.tar.gz -> billiard-4.2.4.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/billiard-4.2.2/.cookiecutterrc
new/billiard-4.2.4/.cookiecutterrc
--- old/billiard-4.2.2/.cookiecutterrc 1970-01-01 01:00:00.000000000 +0100
+++ new/billiard-4.2.4/.cookiecutterrc 2025-11-30 14:27:54.000000000 +0100
@@ -0,0 +1,10 @@
+default_context:
+
+ email: '[email protected]'
+ full_name: 'Ask Solem'
+ github_username: 'celery'
+ project_name: 'Billiard'
+ project_short_description: 'Python multiprocessing fork with improvements
and bugfixes'
+ project_slug: 'billiard'
+ version: '1.0.0'
+ year: '2009-2016'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/billiard-4.2.2/.editorconfig
new/billiard-4.2.4/.editorconfig
--- old/billiard-4.2.2/.editorconfig 1970-01-01 01:00:00.000000000 +0100
+++ new/billiard-4.2.4/.editorconfig 2025-11-30 14:27:54.000000000 +0100
@@ -0,0 +1,14 @@
+# https://editorconfig.org/
+
+root = true
+
+[*]
+indent_style = space
+indent_size = 4
+trim_trailing_whitespace = true
+insert_final_newline = true
+charset = utf-8
+end_of_line = lf
+
+[Makefile]
+indent_style = tab
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/billiard-4.2.2/.github/dependabot.yml
new/billiard-4.2.4/.github/dependabot.yml
--- old/billiard-4.2.2/.github/dependabot.yml 1970-01-01 01:00:00.000000000
+0100
+++ new/billiard-4.2.4/.github/dependabot.yml 2025-11-30 14:27:54.000000000
+0100
@@ -0,0 +1,13 @@
+# Keep GitHub Actions up to date with GitHub's Dependabot...
+#
https://docs.github.com/en/code-security/dependabot/working-with-dependabot/keeping-your-actions-up-to-date-with-dependabot
+#
https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file#package-ecosystem
+version: 2
+updates:
+ - package-ecosystem: github-actions
+ directory: /
+ groups:
+ github-actions:
+ patterns:
+ - "*" # Group all Actions updates into a single larger pull request
+ schedule:
+ interval: weekly
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/billiard-4.2.2/.github/workflows/ci.yaml
new/billiard-4.2.4/.github/workflows/ci.yaml
--- old/billiard-4.2.2/.github/workflows/ci.yaml 1970-01-01
01:00:00.000000000 +0100
+++ new/billiard-4.2.4/.github/workflows/ci.yaml 2025-11-30
14:27:54.000000000 +0100
@@ -0,0 +1,25 @@
+name: CI
+on: [pull_request, push]
+jobs:
+ #################### Unittests ####################
+ unittest:
+ runs-on: blacksmith-4vcpu-ubuntu-2204
+ strategy:
+ fail-fast: false
+ matrix:
+ python-version: ['3.8', '3.9', '3.10', '3.11', '3.12', '3.13', '3.14']
+ steps:
+ - name: Install system packages
+ run: sudo apt update && sudo apt-get install libcurl4-openssl-dev
libssl-dev
+ - name: Check out code from GitHub
+ uses: actions/checkout@v6
+ - name: Set up Python ${{ matrix.python-version }}
+ id: python
+ uses: actions/setup-python@main
+ with:
+ python-version: ${{ matrix.python-version }}
+ allow-prereleases: true
+ - name: Install dependencies
+ run: pip install --upgrade pip setuptools wheel tox tox-gh-actions
tox-docker
+ - name: Run unittest
+ run: tox -v -e ${{ matrix.python-version }}-unit -- -v
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/billiard-4.2.2/.github/workflows/codeql-analysis.yml
new/billiard-4.2.4/.github/workflows/codeql-analysis.yml
--- old/billiard-4.2.2/.github/workflows/codeql-analysis.yml 1970-01-01
01:00:00.000000000 +0100
+++ new/billiard-4.2.4/.github/workflows/codeql-analysis.yml 2025-11-30
14:27:54.000000000 +0100
@@ -0,0 +1,70 @@
+# For most projects, this workflow file will not need changing; you simply need
+# to commit it to your repository.
+#
+# You may wish to alter this file to override the set of languages analyzed,
+# or to provide custom queries or build logic.
+#
+# ******** NOTE ********
+# We have attempted to detect the languages in your repository. Please check
+# the `language` matrix defined below to confirm you have the correct set of
+# supported CodeQL languages.
+#
+name: "CodeQL"
+
+on:
+ push:
+ branches: [ main ]
+ pull_request:
+ # The branches below must be a subset of the branches above
+ branches: [ main ]
+ schedule:
+ - cron: '40 0 * * 5'
+
+jobs:
+ analyze:
+ name: Analyze
+ runs-on: blacksmith-4vcpu-ubuntu-2204
+ permissions:
+ actions: read
+ contents: read
+ security-events: write
+
+ strategy:
+ fail-fast: false
+ matrix:
+ language: [ 'python' ]
+ # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript',
'python', 'ruby' ]
+ # Learn more about CodeQL language support at
https://git.io/codeql-language-support
+
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v6
+
+ # Initializes the CodeQL tools for scanning.
+ - name: Initialize CodeQL
+ uses: github/codeql-action/init@v4
+ with:
+ languages: ${{ matrix.language }}
+ # If you wish to specify custom queries, you can do so here or in a
config file.
+ # By default, queries listed here will override any specified in a
config file.
+ # Prefix the list here with "+" to use these queries and those in the
config file.
+ # queries: ./path/to/local/query, your-org/your-repo/queries@main
+
+ # Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
+ # If this step fails, then you should remove it and run the build manually
(see below)
+ - name: Autobuild
+ uses: github/codeql-action/autobuild@v4
+
+ # âšī¸ Command-line programs to run using the OS shell.
+ # đ https://git.io/JvXDl
+
+ # âī¸ If the Autobuild fails above, remove it and uncomment the following
three lines
+ # and modify them (or add more) to build your code if your project
+ # uses a compiled language
+
+ #- run: |
+ # make bootstrap
+ # make release
+
+ - name: Perform CodeQL Analysis
+ uses: github/codeql-action/analyze@v4
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/billiard-4.2.2/.github/workflows/codespell.yml
new/billiard-4.2.4/.github/workflows/codespell.yml
--- old/billiard-4.2.2/.github/workflows/codespell.yml 1970-01-01
01:00:00.000000000 +0100
+++ new/billiard-4.2.4/.github/workflows/codespell.yml 2025-11-30
14:27:54.000000000 +0100
@@ -0,0 +1,25 @@
+# Codespell configuration is within setup.cfg
+---
+name: Codespell
+
+on:
+ push:
+ branches: [main]
+ pull_request:
+ branches: [main]
+
+permissions:
+ contents: read
+
+jobs:
+ codespell:
+ name: Check for spelling errors
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v6
+ - name: Annotate locations with typos
+ uses: codespell-project/codespell-problem-matcher@v1
+ - name: Codespell
+ uses: codespell-project/actions-codespell@v2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/billiard-4.2.2/.gitignore
new/billiard-4.2.4/.gitignore
--- old/billiard-4.2.2/.gitignore 1970-01-01 01:00:00.000000000 +0100
+++ new/billiard-4.2.4/.gitignore 2025-11-30 14:27:54.000000000 +0100
@@ -0,0 +1,29 @@
+.DS_Store
+*.pyc
+*~
+*.sqlite
+*.sqlite-journal
+settings_local.py
+local_settings.py
+.*.sw[po]
+dist/
+*.egg-info
+doc/__build/*
+build/
+locale/
+pip-log.txt
+devdatabase.db
+.directory
+bundle_version.gen
+celeryd.log
+celeryd.pid
+coverage.xml
+cover/
+*.so
+.tox/
+.eggs/
+htmlcov/
+.cache/
+.coverage
+.vscode/
+.python-version
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/billiard-4.2.2/.pre-commit-config.yaml
new/billiard-4.2.4/.pre-commit-config.yaml
--- old/billiard-4.2.2/.pre-commit-config.yaml 1970-01-01 01:00:00.000000000
+0100
+++ new/billiard-4.2.4/.pre-commit-config.yaml 2025-11-30 14:27:54.000000000
+0100
@@ -0,0 +1,13 @@
+# Learn more about this config here: https://pre-commit.com/
+
+# To enable these pre-commit hooks run: `uv tool install pre-commit`
+# or `pipx install pre-commit` or `brew install pre-commit`
+# Then in the project root directory run `pre-commit install`
+
+repos:
+ - repo: https://github.com/codespell-project/codespell
+ rev: v2.4.1
+ hooks:
+ - id: codespell # See pyproject.toml for args
+ additional_dependencies:
+ - tomli
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/billiard-4.2.2/CHANGES.txt
new/billiard-4.2.4/CHANGES.txt
--- old/billiard-4.2.2/CHANGES.txt 2025-09-20 16:43:25.000000000 +0200
+++ new/billiard-4.2.4/CHANGES.txt 2025-11-30 14:27:54.000000000 +0100
@@ -1,3 +1,13 @@
+4.2.4 - 2025-11-30
+--------------------
+- Eliminate usage of 'return' in 'finally' blocks (#438)
+- Prepare for release: v4.2.4 (#439)
+
+4.2.3 - 2025-11-16
+--------------------
+- Ensure that task results are delivered during pool shutdown (#435)
+- Prepare for release: v4.2.3 (#436)
+
4.2.2 - 2025-09-20
--------------------
- Add codespell support (config, workflow to detect/not fix) and make it fix
few typos
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/billiard-4.2.2/PKG-INFO new/billiard-4.2.4/PKG-INFO
--- old/billiard-4.2.2/PKG-INFO 2025-09-20 16:44:17.965411200 +0200
+++ new/billiard-4.2.4/PKG-INFO 1970-01-01 01:00:00.000000000 +0100
@@ -1,119 +0,0 @@
-Metadata-Version: 2.1
-Name: billiard
-Version: 4.2.2
-Summary: Python multiprocessing fork with improvements and bugfixes
-Home-page: https://github.com/celery/billiard
-Author: R Oudkerk / Python Software Foundation
-Author-email: [email protected]
-Maintainer: Asif Saif Uddin
-Maintainer-email: [email protected]
-License: BSD
-Keywords: multiprocessing pool process
-Classifier: Development Status :: 5 - Production/Stable
-Classifier: Intended Audience :: Developers
-Classifier: Programming Language :: Python
-Classifier: Programming Language :: C
-Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.12
-Classifier: Programming Language :: Python :: 3.8
-Classifier: Programming Language :: Python :: 3.9
-Classifier: Programming Language :: Python :: 3.10
-Classifier: Programming Language :: Python :: 3.11
-Classifier: Programming Language :: Python :: 3.13
-Classifier: Programming Language :: Python :: Implementation :: CPython
-Classifier: Programming Language :: Python :: Implementation :: PyPy
-Classifier: Operating System :: Microsoft :: Windows
-Classifier: Operating System :: POSIX
-Classifier: License :: OSI Approved :: BSD License
-Classifier: Topic :: Software Development :: Libraries :: Python Modules
-Classifier: Topic :: System :: Distributed Computing
-Requires-Python: >=3.7
-License-File: LICENSE.txt
-
-========
-billiard
-========
-
-|build-status-lin| |build-status-win| |license| |wheel| |pyversion| |pyimp|
-
-:Version: 4.2.2
-:Web: https://billiard.readthedocs.io
-:Download: https://pypi.org/project/billiard/
-:Source: https://github.com/celery/billiard/
-:DeepWiki: |deepwiki|
-
-.. |build-status-lin| image::
https://github.com/celery/billiard/actions/workflows/ci.yaml/badge.svg
- :alt: Build status on Linux
- :target: https://github.com/celery/billiard/actions/workflows/ci.yaml
-
-.. |build-status-win| image::
https://ci.appveyor.com/api/projects/status/github/celery/billiard?png=true&branch=main
- :alt: Build status on Windows
- :target: https://ci.appveyor.com/project/ask/billiard
-
-.. |license| image:: https://img.shields.io/pypi/l/billiard.svg
- :alt: BSD License
- :target: https://opensource.org/licenses/BSD-3-Clause
-
-.. |wheel| image:: https://img.shields.io/pypi/wheel/billiard.svg
- :alt: Billiard can be installed via wheel
- :target: https://pypi.org/project/billiard/
-
-.. |pyversion| image:: https://img.shields.io/pypi/pyversions/billiard.svg
- :alt: Supported Python versions.
- :target: https://pypi.org/project/billiard/
-
-.. |pyimp| image:: https://img.shields.io/pypi/implementation/billiard.svg
- :alt: Support Python implementations.
- :target: https://pypi.org/project/billiard/
-
-.. |deepwiki| image:: https://devin.ai/assets/deepwiki-badge.png
- :alt: Ask http://DeepWiki.com
- :target: https://deepwiki.com/celery/billiard
- :width: 125px
-
-About
------
-
-``billiard`` is a fork of the Python 2.7 `multiprocessing
<https://docs.python.org/library/multiprocessing.html>`_
-package. The multiprocessing package itself is a renamed and updated version of
-R Oudkerk's `pyprocessing <https://pypi.org/project/processing/>`_ package.
-This standalone variant draws its fixes/improvements from python-trunk and
provides
-additional bug fixes and improvements.
-
-- This package would not be possible if not for the contributions of not only
- the current maintainers but all of the contributors to the original
pyprocessing
- package listed `here <http://pyprocessing.berlios.de/doc/THANKS.html>`_.
-
-- Also, it is a fork of the multiprocessing backport package by Christian
Heims.
-
-- It includes the no-execv patch contributed by R. Oudkerk.
-
-- And the Pool improvements previously located in `Celery`_.
-
-- Billiard is used in and is a dependency for `Celery`_ and is maintained by
the
- Celery team.
-
-.. _`Celery`: http://celeryproject.org
-
-Documentation
--------------
-
-The documentation for ``billiard`` is available on `Read the Docs
<https://billiard.readthedocs.io>`_.
-
-Bug reporting
--------------
-
-Please report bugs related to multiprocessing at the
-`Python bug tracker <https://bugs.python.org/>`_. Issues related to billiard
-should be reported at https://github.com/celery/billiard/issues.
-
-billiard is part of the Tidelift Subscription
----------------------------------------------
-
-The maintainers of ``billiard`` and thousands of other packages are working
-with Tidelift to deliver commercial support and maintenance for the open source
-dependencies you use to build your applications. Save time, reduce risk, and
-improve code health, while paying the maintainers of the exact dependencies you
-use. `Learn more`_.
-
-.. _`Learn more`:
https://tidelift.com/subscription/pkg/pypi-billiard?utm_source=pypi-billiard&utm_medium=referral&utm_campaign=readme&utm_term=repo
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/billiard-4.2.2/README.rst
new/billiard-4.2.4/README.rst
--- old/billiard-4.2.2/README.rst 2025-09-20 16:43:25.000000000 +0200
+++ new/billiard-4.2.4/README.rst 2025-11-30 14:27:54.000000000 +0100
@@ -4,7 +4,7 @@
|build-status-lin| |build-status-win| |license| |wheel| |pyversion| |pyimp|
-:Version: 4.2.2
+:Version: 4.2.4
:Web: https://billiard.readthedocs.io
:Download: https://pypi.org/project/billiard/
:Source: https://github.com/celery/billiard/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/billiard-4.2.2/SECURITY.md
new/billiard-4.2.4/SECURITY.md
--- old/billiard-4.2.2/SECURITY.md 1970-01-01 01:00:00.000000000 +0100
+++ new/billiard-4.2.4/SECURITY.md 2025-11-30 14:27:54.000000000 +0100
@@ -0,0 +1,15 @@
+# Security Policy
+
+## Supported Versions
+
+
+| Version | Supported |
+| ------- | ------------------ |
+| 3.6.x | :white_check_mark: |
+| 3.5.x | :x: |
+| 4.0.x | :white_check_mark: |
+| < 3.6 | :x: |
+
+## Reporting a Vulnerability
+
+Please contact [email protected] for reporting Vulnerability issues.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/billiard-4.2.2/billiard/__init__.py
new/billiard-4.2.4/billiard/__init__.py
--- old/billiard-4.2.2/billiard/__init__.py 2025-09-20 16:43:25.000000000
+0200
+++ new/billiard-4.2.4/billiard/__init__.py 2025-11-30 14:27:54.000000000
+0100
@@ -22,7 +22,7 @@
from . import context
-VERSION = (4, 2, 2)
+VERSION = (4, 2, 4)
__version__ = '.'.join(map(str, VERSION[0:4])) + "".join(VERSION[4:])
__author__ = 'R Oudkerk / Python Software Foundation'
__author_email__ = '[email protected]'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/billiard-4.2.2/billiard/connection.py
new/billiard-4.2.4/billiard/connection.py
--- old/billiard-4.2.2/billiard/connection.py 2022-10-02 18:44:01.000000000
+0200
+++ new/billiard-4.2.4/billiard/connection.py 2025-11-30 14:27:54.000000000
+0100
@@ -333,22 +333,28 @@
ov, err = _winapi.ReadFile(
self._handle, bsize, overlapped=True,
)
+ result = None
+ exc_to_raise = None
try:
if err == _winapi.ERROR_IO_PENDING:
waitres = _winapi.WaitForMultipleObjects(
[ov.event], False, INFINITE)
assert waitres == WAIT_OBJECT_0
- except:
+ except Exception as e:
ov.cancel()
- raise
+ exc_to_raise = e
finally:
nread, err = ov.GetOverlappedResult(True)
if err == 0:
f = io.BytesIO()
f.write(ov.getbuffer())
- return f
+ result = f
elif err == _winapi.ERROR_MORE_DATA:
- return self._get_more_data(ov, maxsize)
+ result = self._get_more_data(ov, maxsize)
+ if result is not None:
+ return result
+ if exc_to_raise is not None:
+ raise exc_to_raise
except OSError as e:
if e.winerror == _winapi.ERROR_BROKEN_PIPE:
raise EOFError
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/billiard-4.2.2/billiard/pool.py
new/billiard-4.2.4/billiard/pool.py
--- old/billiard-4.2.2/billiard/pool.py 2024-09-21 15:19:42.000000000 +0200
+++ new/billiard-4.2.4/billiard/pool.py 2025-11-30 14:27:54.000000000 +0100
@@ -1659,7 +1659,12 @@
debug('helping task handler/workers to finish')
cls._help_stuff_finish(*help_stuff_finish_args)
- result_handler.terminate()
+ # Send the sentinel to the result handler but don't terminate the
+ # result handler thread. This allows the thread to continue
+ # processing results in ResultHandler.finish_at_shutdown() until
+ # the cache is drained, ensuring that all task results are properly
+ # stored. A call to ResultHandler.terminate() is not necessary here
+ # because the thread will exit naturally when the cache becomes empty.
cls._set_result_sentinel(outqueue, pool)
if timeout_handler is not None:
@@ -1851,13 +1856,8 @@
except Exception:
response = NACK
# ignore other errors
- finally:
- if self._send_ack and synqW_fd:
- return self._send_ack(
- response, pid, self._job, synqW_fd
- )
if self._send_ack and synqW_fd:
- self._send_ack(response, pid, self._job, synqW_fd)
+ return self._send_ack(response, pid, self._job, synqW_fd)
#
# Class whose instances are returned by `Pool.map_async()`
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/billiard-4.2.2/billiard.egg-info/PKG-INFO
new/billiard-4.2.4/billiard.egg-info/PKG-INFO
--- old/billiard-4.2.2/billiard.egg-info/PKG-INFO 2025-09-20
16:44:17.000000000 +0200
+++ new/billiard-4.2.4/billiard.egg-info/PKG-INFO 1970-01-01
01:00:00.000000000 +0100
@@ -1,119 +0,0 @@
-Metadata-Version: 2.1
-Name: billiard
-Version: 4.2.2
-Summary: Python multiprocessing fork with improvements and bugfixes
-Home-page: https://github.com/celery/billiard
-Author: R Oudkerk / Python Software Foundation
-Author-email: [email protected]
-Maintainer: Asif Saif Uddin
-Maintainer-email: [email protected]
-License: BSD
-Keywords: multiprocessing pool process
-Classifier: Development Status :: 5 - Production/Stable
-Classifier: Intended Audience :: Developers
-Classifier: Programming Language :: Python
-Classifier: Programming Language :: C
-Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.12
-Classifier: Programming Language :: Python :: 3.8
-Classifier: Programming Language :: Python :: 3.9
-Classifier: Programming Language :: Python :: 3.10
-Classifier: Programming Language :: Python :: 3.11
-Classifier: Programming Language :: Python :: 3.13
-Classifier: Programming Language :: Python :: Implementation :: CPython
-Classifier: Programming Language :: Python :: Implementation :: PyPy
-Classifier: Operating System :: Microsoft :: Windows
-Classifier: Operating System :: POSIX
-Classifier: License :: OSI Approved :: BSD License
-Classifier: Topic :: Software Development :: Libraries :: Python Modules
-Classifier: Topic :: System :: Distributed Computing
-Requires-Python: >=3.7
-License-File: LICENSE.txt
-
-========
-billiard
-========
-
-|build-status-lin| |build-status-win| |license| |wheel| |pyversion| |pyimp|
-
-:Version: 4.2.2
-:Web: https://billiard.readthedocs.io
-:Download: https://pypi.org/project/billiard/
-:Source: https://github.com/celery/billiard/
-:DeepWiki: |deepwiki|
-
-.. |build-status-lin| image::
https://github.com/celery/billiard/actions/workflows/ci.yaml/badge.svg
- :alt: Build status on Linux
- :target: https://github.com/celery/billiard/actions/workflows/ci.yaml
-
-.. |build-status-win| image::
https://ci.appveyor.com/api/projects/status/github/celery/billiard?png=true&branch=main
- :alt: Build status on Windows
- :target: https://ci.appveyor.com/project/ask/billiard
-
-.. |license| image:: https://img.shields.io/pypi/l/billiard.svg
- :alt: BSD License
- :target: https://opensource.org/licenses/BSD-3-Clause
-
-.. |wheel| image:: https://img.shields.io/pypi/wheel/billiard.svg
- :alt: Billiard can be installed via wheel
- :target: https://pypi.org/project/billiard/
-
-.. |pyversion| image:: https://img.shields.io/pypi/pyversions/billiard.svg
- :alt: Supported Python versions.
- :target: https://pypi.org/project/billiard/
-
-.. |pyimp| image:: https://img.shields.io/pypi/implementation/billiard.svg
- :alt: Support Python implementations.
- :target: https://pypi.org/project/billiard/
-
-.. |deepwiki| image:: https://devin.ai/assets/deepwiki-badge.png
- :alt: Ask http://DeepWiki.com
- :target: https://deepwiki.com/celery/billiard
- :width: 125px
-
-About
------
-
-``billiard`` is a fork of the Python 2.7 `multiprocessing
<https://docs.python.org/library/multiprocessing.html>`_
-package. The multiprocessing package itself is a renamed and updated version of
-R Oudkerk's `pyprocessing <https://pypi.org/project/processing/>`_ package.
-This standalone variant draws its fixes/improvements from python-trunk and
provides
-additional bug fixes and improvements.
-
-- This package would not be possible if not for the contributions of not only
- the current maintainers but all of the contributors to the original
pyprocessing
- package listed `here <http://pyprocessing.berlios.de/doc/THANKS.html>`_.
-
-- Also, it is a fork of the multiprocessing backport package by Christian
Heims.
-
-- It includes the no-execv patch contributed by R. Oudkerk.
-
-- And the Pool improvements previously located in `Celery`_.
-
-- Billiard is used in and is a dependency for `Celery`_ and is maintained by
the
- Celery team.
-
-.. _`Celery`: http://celeryproject.org
-
-Documentation
--------------
-
-The documentation for ``billiard`` is available on `Read the Docs
<https://billiard.readthedocs.io>`_.
-
-Bug reporting
--------------
-
-Please report bugs related to multiprocessing at the
-`Python bug tracker <https://bugs.python.org/>`_. Issues related to billiard
-should be reported at https://github.com/celery/billiard/issues.
-
-billiard is part of the Tidelift Subscription
----------------------------------------------
-
-The maintainers of ``billiard`` and thousands of other packages are working
-with Tidelift to deliver commercial support and maintenance for the open source
-dependencies you use to build your applications. Save time, reduce risk, and
-improve code health, while paying the maintainers of the exact dependencies you
-use. `Learn more`_.
-
-.. _`Learn more`:
https://tidelift.com/subscription/pkg/pypi-billiard?utm_source=pypi-billiard&utm_medium=referral&utm_campaign=readme&utm_term=repo
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/billiard-4.2.2/billiard.egg-info/SOURCES.txt
new/billiard-4.2.4/billiard.egg-info/SOURCES.txt
--- old/billiard-4.2.2/billiard.egg-info/SOURCES.txt 2025-09-20
16:44:17.000000000 +0200
+++ new/billiard-4.2.4/billiard.egg-info/SOURCES.txt 1970-01-01
01:00:00.000000000 +0100
@@ -1,74 +0,0 @@
-CHANGES.txt
-INSTALL.txt
-LICENSE.txt
-MANIFEST.in
-Makefile
-README.rst
-setup.cfg
-setup.py
-Doc/conf.py
-Doc/glossary.rst
-Doc/index.rst
-Doc/includes/__init__.py
-Doc/includes/mp_benchmarks.py
-Doc/includes/mp_newtype.py
-Doc/includes/mp_pool.py
-Doc/includes/mp_synchronize.py
-Doc/includes/mp_webserver.py
-Doc/includes/mp_workers.py
-Doc/library/multiprocessing.rst
-Modules/_billiard/multiprocessing.c
-Modules/_billiard/multiprocessing.h
-Modules/_billiard/semaphore.c
-Modules/_billiard/win32_functions.c
-billiard/__init__.py
-billiard/_ext.py
-billiard/_win.py
-billiard/common.py
-billiard/compat.py
-billiard/connection.py
-billiard/context.py
-billiard/einfo.py
-billiard/exceptions.py
-billiard/forkserver.py
-billiard/heap.py
-billiard/managers.py
-billiard/pool.py
-billiard/popen_fork.py
-billiard/popen_forkserver.py
-billiard/popen_spawn_posix.py
-billiard/popen_spawn_win32.py
-billiard/process.py
-billiard/queues.py
-billiard/reduction.py
-billiard/resource_sharer.py
-billiard/semaphore_tracker.py
-billiard/sharedctypes.py
-billiard/spawn.py
-billiard/synchronize.py
-billiard/util.py
-billiard.egg-info/PKG-INFO
-billiard.egg-info/SOURCES.txt
-billiard.egg-info/dependency_links.txt
-billiard.egg-info/not-zip-safe
-billiard.egg-info/top_level.txt
-billiard/dummy/__init__.py
-billiard/dummy/connection.py
-requirements/pkgutils.txt
-requirements/test-ci.txt
-requirements/test.txt
-t/__init__.py
-t/skip.py
-t/integration/__init__.py
-t/integration/setup.py
-t/integration/tests/__init__.py
-t/integration/tests/test_multiprocessing.py
-t/unit/__init__.py
-t/unit/test_common.py
-t/unit/test_dummy.py
-t/unit/test_einfo.py
-t/unit/test_package.py
-t/unit/test_pool.py
-t/unit/test_spawn.py
-t/unit/test_values.py
-t/unit/test_win32.py
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/billiard-4.2.2/billiard.egg-info/dependency_links.txt
new/billiard-4.2.4/billiard.egg-info/dependency_links.txt
--- old/billiard-4.2.2/billiard.egg-info/dependency_links.txt 2025-09-20
16:44:17.000000000 +0200
+++ new/billiard-4.2.4/billiard.egg-info/dependency_links.txt 1970-01-01
01:00:00.000000000 +0100
@@ -1 +0,0 @@
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/billiard-4.2.2/billiard.egg-info/not-zip-safe
new/billiard-4.2.4/billiard.egg-info/not-zip-safe
--- old/billiard-4.2.2/billiard.egg-info/not-zip-safe 2025-09-20
16:44:17.000000000 +0200
+++ new/billiard-4.2.4/billiard.egg-info/not-zip-safe 1970-01-01
01:00:00.000000000 +0100
@@ -1 +0,0 @@
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/billiard-4.2.2/billiard.egg-info/top_level.txt
new/billiard-4.2.4/billiard.egg-info/top_level.txt
--- old/billiard-4.2.2/billiard.egg-info/top_level.txt 2025-09-20
16:44:17.000000000 +0200
+++ new/billiard-4.2.4/billiard.egg-info/top_level.txt 1970-01-01
01:00:00.000000000 +0100
@@ -1 +0,0 @@
-billiard
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/billiard-4.2.2/setup.cfg new/billiard-4.2.4/setup.cfg
--- old/billiard-4.2.2/setup.cfg 2025-09-20 16:44:17.965843000 +0200
+++ new/billiard-4.2.4/setup.cfg 2025-11-30 14:27:54.000000000 +0100
@@ -3,6 +3,8 @@
python_classes = test_*
[flake8]
+# classes can be lowercase, arguments and variables can be uppercase
+# whenever it makes the code more readable.
ignore = N806, N802, N801, N803, E305
[pep257]
@@ -12,11 +14,8 @@
license_file = LICENSE.txt
[codespell]
+# Ref: https://github.com/codespell-project/codespell#using-a-config-file
skip = .git*
check-hidden = true
+# ignore-regex =
ignore-words-list = assertin
-
-[egg_info]
-tag_build =
-tag_date = 0
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/billiard-4.2.2/t/integration/setup.cfg
new/billiard-4.2.4/t/integration/setup.cfg
--- old/billiard-4.2.2/t/integration/setup.cfg 1970-01-01 01:00:00.000000000
+0100
+++ new/billiard-4.2.4/t/integration/setup.cfg 2025-11-30 14:27:54.000000000
+0100
@@ -0,0 +1,4 @@
+[nosetests]
+verbosity = 1
+detailed-errors = 1
+where = tests
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/billiard-4.2.2/t/unit/test_pool.py
new/billiard-4.2.4/t/unit/test_pool.py
--- old/billiard-4.2.2/t/unit/test_pool.py 2024-09-21 15:19:42.000000000
+0200
+++ new/billiard-4.2.4/t/unit/test_pool.py 2025-11-30 14:27:54.000000000
+0100
@@ -15,6 +15,8 @@
worker = inspect.stack()[1].frame.f_locals['self']
return worker.on_ready_counter.value
+def simple_task(x):
+ return x * 2
class test_pool:
def test_raises(self):
@@ -56,3 +58,53 @@
pool.close()
pool.join()
pool.terminate()
+
+ def test_graceful_shutdown_delivers_results(self):
+ """Test that queued results are delivered during pool shutdown.
+
+ Specifically, this test verifies that when _terminate_pool() is called,
+ the ResultHandler.finish_at_shutdown() continues processing results
+ that workers have placed in the outqueue.
+ """
+
+ # Create pool with threads=False so that the result handler thread does
+ # not start and the task results are allowed to build up in the queue.
+ pool = billiard.pool.Pool(processes=2, threads=False)
+
+ # Submit tasks so that results are queued but not processed.
+ results = [pool.apply_async(simple_task, (i,)) for i in range(8)]
+
+ # Allow a small amount of time for tasks to complete.
+ time.sleep(0.5)
+
+ # Close and join the pool to ensure workers stop.
+ pool.close()
+ pool.join()
+
+ # Call the _terminate_pool() class method to trigger the
finish_at_shutdown()
+ # function that will process results in the queue. Normally
_terminate_pool()
+ # is called by a Finalize object when the Pool object is destroyed. We
cannot
+ # call pool.terminate() here because it will call the Finalize object,
which
+ # won't do anything until the Pool object is destroyed at the end of
this test.
+ # We can simulate the shutdown behaviour by calling _terminate_pool()
directly.
+ billiard.pool.Pool._terminate_pool(
+ pool._taskqueue,
+ pool._inqueue,
+ pool._outqueue,
+ pool._pool,
+ pool._worker_handler,
+ pool._task_handler,
+ pool._result_handler,
+ pool._cache,
+ pool._timeout_handler,
+ pool._help_stuff_finish_args()
+ )
+
+ # Cancel the Finalize object to prevent _terminate_pool() from being
called
+ # a second time when the Pool object is destroyed.
+ pool._terminate.cancel()
+
+ # Verify that all results were delivered by finish_at_shutdown() and
can be
+ # retrieved.
+ for i, result in enumerate(results):
+ assert result.get() == i * 2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/billiard-4.2.2/tox.ini new/billiard-4.2.4/tox.ini
--- old/billiard-4.2.2/tox.ini 1970-01-01 01:00:00.000000000 +0100
+++ new/billiard-4.2.4/tox.ini 2025-11-30 14:27:54.000000000 +0100
@@ -0,0 +1,23 @@
+[tox]
+requires =
+ tox-gh-actions
+envlist = {3.8,3.9,3.10,3.11,3.12,3.13,3.14}-unit
+skip_missing_interpreters = True
+
+[gh-actions]
+python =
+ 3.8: 3.8-unit
+ 3.9: 3.9-unit
+ 3.10: 3.10-unit
+ 3.11: 3.11-unit
+ 3.12: 3.12-unit
+ 3.13: 3.13-unit
+ 3.14: 3.14-unit
+
+[testenv]
+distribute = True
+sitepackages = False
+commands = py.test -xv
+deps=
+ -r{toxinidir}/requirements/test-ci.txt
+ -r{toxinidir}/requirements/test.txt