]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.14] gh-116738: add multi-threaded tests for `resource` module on free-threading...
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Tue, 7 Oct 2025 18:23:58 +0000 (20:23 +0200)
committerGitHub <noreply@github.com>
Tue, 7 Oct 2025 18:23:58 +0000 (18:23 +0000)
gh-116738: add multi-threaded tests for `resource` module on free-threading builds (GH-138504)
(cherry picked from commit 32e1e0699ffda8ec1dd5a0eb178b052352ab7d31)

Co-authored-by: Alper <alperyoney@fb.com>
Co-authored-by: Kumar Aditya <kumaraditya@python.org>
Lib/test/test_free_threading/test_resource.py [new file with mode: 0644]

diff --git a/Lib/test/test_free_threading/test_resource.py b/Lib/test/test_free_threading/test_resource.py
new file mode 100644 (file)
index 0000000..ecd0e53
--- /dev/null
@@ -0,0 +1,41 @@
+import unittest
+from test.support import import_helper, threading_helper
+
+resource = import_helper.import_module("resource")
+
+
+NTHREADS = 10
+LOOP_PER_THREAD = 1000
+
+
+@threading_helper.requires_working_threading()
+class ResourceTest(unittest.TestCase):
+    @unittest.skipUnless(hasattr(resource, "getrusage"), "needs getrusage")
+    @unittest.skipUnless(
+        hasattr(resource, "RUSAGE_THREAD"), "needs RUSAGE_THREAD"
+    )
+    def test_getrusage(self):
+        ru_utime_lst = []
+
+        def dummy_work(ru_utime_lst):
+            for _ in range(LOOP_PER_THREAD):
+                pass
+
+            usage_process = resource.getrusage(resource.RUSAGE_SELF)
+            usage_thread = resource.getrusage(resource.RUSAGE_THREAD)
+            # Process user time should be greater than thread user time
+            self.assertGreater(usage_process.ru_utime, usage_thread.ru_utime)
+            ru_utime_lst.append(usage_thread.ru_utime)
+
+        threading_helper.run_concurrently(
+            worker_func=dummy_work, args=(ru_utime_lst,), nthreads=NTHREADS
+        )
+
+        usage_process = resource.getrusage(resource.RUSAGE_SELF)
+        self.assertEqual(len(ru_utime_lst), NTHREADS)
+        # Process user time should be greater than sum of all thread user times
+        self.assertGreater(usage_process.ru_utime, sum(ru_utime_lst))
+
+
+if __name__ == "__main__":
+    unittest.main()