[New-bugs-announce] [issue45021] Race condition in thread.py
nullptr
report at bugs.python.org
Thu Aug 26 16:09:17 EDT 2021
New submission from nullptr <xavier.lacroze at gmail.com>:
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 <report at bugs.python.org>
<https://bugs.python.org/issue45021>
_______________________________________
More information about the New-bugs-announce
mailing list