New submission from nullptr <[email protected]>:
The following code can sometimes hang up
import random
from concurrent.futures import ProcessPoolExecutor, ThreadPoolExecutor
from time import sleep
def worker():
with ProcessPoolExecutor() as pool:
r = list(pool.map(sleep, [0.01] * 8))
if __name__ == '__main__':
pool = ThreadPoolExecutor()
i = 0
while True:
if random.random() < 0.9:
pool.submit(sleep, 0.001)
else:
r = pool.submit(worker)
r = r.result()
i += 1
print('alive', i)
It's a bit hard to trigger that way but with some luck and many restarts it'll
eventually freeze as r.result() never returns.
The backtrace from a child process shows that the child is stuck in
Lib/concurrent/futures/thread.py:_python_exit waiting for _global_shutdown_lock.
The fork happened while the lock was already grabbed i.e. while executing
ThreadPoolExecutor.submit
----------
components: Library (Lib)
messages: 400378
nosy: xavier.lacroze
priority: normal
severity: normal
status: open
title: Race condition in thread.py
versions: Python 3.9
_______________________________________
Python tracker <[email protected]>
<https://bugs.python.org/issue45021>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com