classification
Title: Interpreter exit blocks waiting for ThreadPoolExecutor.map
Type: behavior Stage:
Components: Library (Lib) Versions: Python 3.8, Python 3.7, Python 3.6
process
Status: open Resolution:
Dependencies: Superseder:
Assigned To: Nosy List: gsakkis, stefosgiwrgos
Priority: normal Keywords:

Created on 2020-11-19 15:02 by gsakkis, last changed 2020-11-19 15:13 by stefosgiwrgos.

Files
File name Uploaded Description Edit
threadpool_map.py gsakkis, 2020-11-19 15:02
Messages (1)
msg381433 - (view) Author: George Sakkis (gsakkis) Date: 2020-11-19 15:02
ThreadPoolExecutor.map() prevents interpreter exit if there is a reference to the generator it returns. In the attached script:

- `python threadpool_map.py run1` exits as soon as the exception is raised on the main thread. This is the desired behavior in our case.

- `python threadpool_map.py run2` keeps running until the thread worker processes all queued work items. The only difference from `run1` is that the result of `ThreadPoolExecutor.map()` is assigned to a variable.

- `python threadpool_map.py run3` has a `finally` block that shuts down the executor without waiting. Still the worker thread keeps running even after the shutdown.

Initially it seemed like https://bugs.python.org/issue36780 but there is no change in the behavior after commenting out the `atexit.register(_python_exit)` call (for the `run2` case at least).
History
Date User Action Args
2020-11-19 15:13:12stefosgiwrgossetnosy: + stefosgiwrgos
2020-11-19 15:02:33gsakkiscreate