From 88de3ebb8c461ac9d7efaca37808e7f23d8e8c1d Mon Sep 17 00:00:00 2001 From: 1ndahous3 <9205230+1ndahous3@users.noreply.github.com> Date: Sun, 18 Oct 2026 11:41:59 +0300 Subject: [PATCH] Accept keyword arguments in SemLock constructors Assisted-by: Codex:GPT-6 --- crates/stdlib/src/multiprocessing.rs | 20 +++++++++---------- .../stdlib_multiprocessing_condition.py | 12 +++++++++++ 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/crates/stdlib/src/multiprocessing.rs b/crates/stdlib/src/multiprocessing.rs index c9a0790396b..537c86b68a1 100644 --- a/crates/stdlib/src/multiprocessing.rs +++ b/crates/stdlib/src/multiprocessing.rs @@ -115,15 +115,15 @@ mod _multiprocessing { #[derive(FromArgs)] struct SemLockNewArgs { - #[pyarg(positional)] + #[pyarg(any)] kind: i32, - #[pyarg(positional)] + #[pyarg(any)] value: i32, - #[pyarg(positional)] + #[pyarg(any)] maxvalue: i32, - #[pyarg(positional)] + #[pyarg(any)] name: String, - #[pyarg(positional)] + #[pyarg(any)] unlink: bool, } @@ -515,15 +515,15 @@ mod _multiprocessing { #[derive(FromArgs)] struct SemLockNewArgs { - #[pyarg(positional)] + #[pyarg(any)] kind: i32, - #[pyarg(positional)] + #[pyarg(any)] value: i32, - #[pyarg(positional)] + #[pyarg(any)] maxvalue: i32, - #[pyarg(positional)] + #[pyarg(any)] name: String, - #[pyarg(positional)] + #[pyarg(any)] unlink: bool, } diff --git a/extra_tests/snippets/stdlib_multiprocessing_condition.py b/extra_tests/snippets/stdlib_multiprocessing_condition.py index 6d38dc0db9b..2ab4e17b943 100644 --- a/extra_tests/snippets/stdlib_multiprocessing_condition.py +++ b/extra_tests/snippets/stdlib_multiprocessing_condition.py @@ -2,6 +2,7 @@ import multiprocessing import threading +from _multiprocessing import SemLock def wait_on_condition(cond, started, woken): @@ -80,6 +81,17 @@ def notify_one_then_the_other(ctx): if __name__ == "__main__": multiprocessing.freeze_support() + # Low-level callers can supply every constructor parameter by name. + name = f"/rustpython_kw_{multiprocessing.current_process().pid}" + for args, kwargs in ( + ((1, 1, 1), {"name": name, "unlink": True}), + ((), {"kind": 1, "value": 1, "maxvalue": 1, "name": name, "unlink": True}), + ): + sem = SemLock(*args, **kwargs) + assert sem.acquire(False) + assert not sem.acquire(False) + sem.release() + del sem methods = ["spawn"] if "forkserver" in multiprocessing.get_all_start_methods(): methods.append("forkserver")