New submission from nullptr <xavier.lacr...@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 <rep...@bugs.python.org> <https://bugs.python.org/issue45021> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com