cpython/Lib/concurrent/futures
Victor Stinner 356de021d7
[3.12] gh-109047: concurrent.futures catches RuntimeError (#109810) (#110126)
gh-109047: concurrent.futures catches PythonFinalizationError (#109810)

concurrent.futures: The *executor manager thread* now catches
exceptions when adding an item to the *call queue*. During Python
finalization, creating a new thread can now raise RuntimeError. Catch
the exception and call terminate_broken() in this case.

Add test_python_finalization_error() to test_concurrent_futures.

concurrent.futures._ExecutorManagerThread changes:

* terminate_broken() no longer calls shutdown_workers() since the
  call queue is no longer working anymore (read and write ends of
  the queue pipe are closed).
* terminate_broken() now terminates child processes, not only
  wait until they complete.
* _ExecutorManagerThread.terminate_broken() now holds shutdown_lock
  to prevent race conditons with ProcessPoolExecutor.submit().

multiprocessing.Queue changes:

* Add _terminate_broken() method.
* _start_thread() sets _thread to None on exception to prevent
  leaking "dangling threads" even if the thread was not started
  yet.

(cherry picked from commit 6351842121)
2023-10-02 17:47:10 +02:00
..
__init__.py bpo-46522: fix concurrent.futures and io AttributeError messages (GH-30887) 2022-02-23 02:25:00 +02:00
_base.py gh-95166: cancel map waited on future on timeout (GH-95169) 2022-07-28 11:20:10 +02:00
process.py [3.12] gh-109047: concurrent.futures catches RuntimeError (#109810) (#110126) 2023-10-02 17:47:10 +02:00
thread.py [3.12] gh-102024: Reduced _idle_semaphore.release calls (GH-102025) (#104959) 2023-05-26 06:21:15 +00:00