mirror of
https://github.com/python/cpython.git
synced 2025-11-01 06:01:29 +00:00
gh-116738: add multi-threaded tests for resource module on free-threading builds (#138504)
This commit is contained in:
parent
d325cddc6b
commit
32e1e0699f
1 changed files with 41 additions and 0 deletions
41
Lib/test/test_free_threading/test_resource.py
Normal file
41
Lib/test/test_free_threading/test_resource.py
Normal 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()
|
||||
Loading…
Add table
Add a link
Reference in a new issue