added 2 commits
Merged
…tdown(wait=False) When a ProcessPoolExecutor was created, a job added and then shutdown with wait=False, an OSError: handle is closed error was raised by the ThreadWakeup class. The threadwakeup should not be closed on shutdown if wait is False, but in the shutdown_worker method.
pitrou
changed the title
bpo-39104 Fix hanging ProcessPoolExcutor on shutdown nowait with pickling failure
bpo-39104: Fix hanging ProcessPoolExcutor on shutdown nowait with pickling failure
pitrou
changed the title
bpo-39104: Fix hanging ProcessPoolExcutor on shutdown nowait with pickling failure
bpo-39104: Fix hanging ProcessPoolExecutor on shutdown nowait with pickling failure
Merged
Merged
This was referenced
Closed
Closed
colesbury referenced this pull request in colesbury/nogil
…ckling failure (GH-17670) As reported initially by @rad-pat in #6084, the following script causes a deadlock. ``` from concurrent.futures import ProcessPoolExecutor class ObjectWithPickleError(): """Triggers a RuntimeError when sending job to the workers""" def __reduce__(self): raise RuntimeError() if __name__ == "__main__": e = ProcessPoolExecutor() f = e.submit(id, ObjectWithPickleError()) e.shutdown(wait=False) f.result() # Deadlock on get ``` This is caused by the fact that the main process is closing communication channels that might be necessary to the `queue_management_thread` later. To avoid this, this PR let the `queue_management_thread` manage all the closing. https://bugs.python.org/issue39104 Automerge-Triggered-By: @pitrou
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters