gh-116738: add multi-threaded tests for resource module on free-threading builds (#138504)

This commit is contained in:
Alper 2025-09-11 06:38:08 -07:00 committed by GitHub
parent d325cddc6b
commit 32e1e0699f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -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()