Closed
Description
Bug report
import contextlib
import functools
import concurrent.futures
import threading
import sys
def fn(num, stop_event):
if num == 1:
stop_event.wait()
return "done 1"
if num == 2:
return "done 2"
def main():
stop_event = threading.Event()
log = []
with concurrent.futures.ThreadPoolExecutor(max_workers=1) as pool:
def print_n_wait(ident):
log.append(f"{ident=} started")
try:
stop_event.wait()
finally:
log.append(f"{ident=} stopped")
fut = pool.submit(print_n_wait, ident="first")
try:
with contextlib.closing(pool.map(print_n_wait, ["second", "third"], timeout=1)) as gen:
try:
next(gen)
except concurrent.futures.TimeoutError:
print("timed out")
else:
raise RuntimeError("timeout expected")
finally:
stop_event.set()
assert log == ["ident='first' started", "ident='first' stopped"], f"{log=} is wrong"
if __name__ == "__main__":
sys.exit(main())
result in:
timed out
Traceback (most recent call last):
File "/home/graingert/projects/executor_map.py", line 45, in <module>
sys.exit(main())
File "/home/graingert/projects/executor_map.py", line 42, in main
assert log == ["ident='first' started", "ident='first' stopped"], f"{log=} is wrong"
AssertionError: log=["ident='first' started", "ident='first' stopped", "ident='second' started", "ident='second' stopped"] is wrong
Your environment
- CPython versions tested on:
- Operating system and architecture:
Metadata
Metadata
Assignees
Labels
An unexpected behavior, bug, or errorAn unexpected behavior, bug, or error