import threading
def start_thread():
t = threading.Thread(target=id, args=[0])
t.start()
return t
for i in range(10000):
threads = [start_thread() for j in range(32)]
for t in threads:
t.join()
(based on something from openexr for testing thread pool management)
on glitch this fails with
Traceback (most recent call last):
File "misc/threads.py", line 9, in <module>
threads = [start_thread() for j in range(32)]
File "misc/threads.py", line 9, in <listcomp>
threads = [start_thread() for j in range(32)]
File "misc/threads.py", line 5, in start_thread
t.start()
File "/usr/lib/python3.7/threading.py", line 852, in start
_start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
and I couldn’t reproduce this on a different computer
docker run -it --rm --pids-limit 512 python:3.11 bash
cat >threads.py <<EOF
(paste that script)
EOF
python3 threads.py
# takes a while but succeeds
is there something missing from the code for shutting down this dummy thread pool?
if you add a time.sleep(0.010)
(10 ms) after the for ... join()
, it seems to run fine.