Skip to content

python: declare free-threading support in graph modules#5243

Open
joshlk wants to merge 1 commit into
google:mainfrom
joshlk:python-graph-free-threading
Open

python: declare free-threading support in graph modules#5243
joshlk wants to merge 1 commit into
google:mainfrom
joshlk:python-graph-free-threading

Conversation

@joshlk

@joshlk joshlk commented Jul 5, 2026

Copy link
Copy Markdown

Adds pybind11::mod_gil_not_used() to the three ortools.graph.python modules (min_cost_flow, max_flow, linear_sum_assignment).

OR-Tools has shipped free-threaded (cp313t/cp314t) Linux wheels since 9.12, but because no extension module declares Py_mod_gil_not_used, importing e.g. ortools.graph.python.min_cost_flow on a free-threaded interpreter emits a RuntimeWarning and re-enables the GIL process-wide, which defeats the purpose of the free-threaded build.

These three modules are stateless pybind11 bindings around SimpleMinCostFlow / SimpleMaxFlow / SimpleLinearSumAssignment, which hold all state per instance with no global/static mutable state.

Motivation: k-means-constrained uses SimpleMinCostFlow and is adding free-threaded (3.14t) wheels for true multi-threaded solving; this declaration is what currently blocks the GIL staying disabled.

@google-cla

google-cla Bot commented Jul 5, 2026

Copy link
Copy Markdown

Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA).

View this failed invocation of the CLA check for more information.

For the most up to date status, view the checks section at the bottom of the pull request.

Add pybind11::mod_gil_not_used() to the min_cost_flow, max_flow and
linear_sum_assignment modules so that importing them on a free-threaded
CPython build (3.13t/3.14t) no longer re-enables the GIL.
@joshlk joshlk force-pushed the python-graph-free-threading branch from 9f5ea74 to a53a3ef Compare July 5, 2026 10:22
@Mizux Mizux self-assigned this Jul 5, 2026
@Mizux Mizux added Bug Lang: Python Python wrapper issue labels Jul 5, 2026
@Mizux Mizux added this to the v10.0 Beta milestone Jul 5, 2026
@joshlk

joshlk commented Jul 5, 2026

Copy link
Copy Markdown
Author

CI note: the two failing checks are unrelated to this change and also fail on main:

All jobs exercising this change pass, including the graph Python sample tests.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Bug Lang: Python Python wrapper issue

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants