Skip to content

Commit 61b50a9

Browse files
gh-109700: Improve stress tests for interpreter creation (GH-109946)
* Ensure that destructors are called in the test that created interpreters, not after finishing it. * Try to create/run interpreters in threads simultaneously. * Mark tests that requires over 6GB of memory with bigmemtest.
1 parent 95d2a81 commit 61b50a9

File tree

1 file changed

+21
-9
lines changed

1 file changed

+21
-9
lines changed

Lib/test/test_interpreters/test_stress.py

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,21 +21,29 @@ def test_create_many_sequential(self):
2121
for _ in range(100):
2222
interp = interpreters.create()
2323
alive.append(interp)
24+
del alive
25+
support.gc_collect()
2426

25-
@support.requires_resource('cpu')
26-
@threading_helper.requires_working_threading()
27-
def test_create_many_threaded(self):
27+
@support.bigmemtest(size=200, memuse=32*2**20, dry_run=False)
28+
def test_create_many_threaded(self, size):
2829
alive = []
30+
start = threading.Event()
2931
def task():
32+
# try to create all interpreters simultaneously
33+
if not start.wait(support.SHORT_TIMEOUT):
34+
raise TimeoutError
3035
interp = interpreters.create()
3136
alive.append(interp)
32-
threads = (threading.Thread(target=task) for _ in range(200))
37+
threads = [threading.Thread(target=task) for _ in range(size)]
3338
with threading_helper.start_threads(threads):
34-
pass
39+
start.set()
40+
del alive
41+
support.gc_collect()
3542

36-
@support.requires_resource('cpu')
3743
@threading_helper.requires_working_threading()
38-
def test_many_threads_running_interp_in_other_interp(self):
44+
@support.bigmemtest(size=200, memuse=34*2**20, dry_run=False)
45+
def test_many_threads_running_interp_in_other_interp(self, size):
46+
start = threading.Event()
3947
interp = interpreters.create()
4048

4149
script = f"""if True:
@@ -47,6 +55,9 @@ def run():
4755
interp = interpreters.create()
4856
alreadyrunning = (f'{interpreters.InterpreterError}: '
4957
'interpreter already running')
58+
# try to run all interpreters simultaneously
59+
if not start.wait(support.SHORT_TIMEOUT):
60+
raise TimeoutError
5061
success = False
5162
while not success:
5263
try:
@@ -58,9 +69,10 @@ def run():
5869
else:
5970
success = True
6071

61-
threads = (threading.Thread(target=run) for _ in range(200))
72+
threads = [threading.Thread(target=run) for _ in range(size)]
6273
with threading_helper.start_threads(threads):
63-
pass
74+
start.set()
75+
support.gc_collect()
6476

6577

6678
if __name__ == '__main__':

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy