You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
concurrent.futures.Executor.map with buffersize should yield from buffer and raise after executor shutdown #146392
As pointed by @salomvary in this discussion, the behavior of concurrent.futures.Executor.map with buffersize is misleading when iterating after the executor's shutdown. There is 2 cases:
Create the generator, shut down the executor, start iterating:
withThreadPoolExecutor(1) asexecutor:
iterator=executor.map(str, range(8), buffersize=2)
# start iterating after the shutdownassertnext(iterator) =="0"assertnext(iterator) =="1"# raises StopIterationnext(iterator)
In this scenario the elements from the buffer are yielded, then the iteration is stopped.
Create the generator, start the iteration, shut down the executor, continue the iteration
withThreadPoolExecutor(1) asexecutor:
iterator=executor.map(str, range(8), buffersize=2)
# start iterating before the shutdownassertnext(iterator) =="0"# raises "RuntimeError: cannot schedule new futures after shutdown"next(iterator)
In this scenario a RuntimeError is raised by the first post-shutdown next, leaving not-yet-yielded results in the buffer.
I would vote for a mix of both: yield from the buffer and then raise the exception.
Activity
pythongh-146392: Delay Executor.map shutdown error until buffer is dr…