Thanks for all your hard work on the `cancel_futures` feature!

As you said, there is a complexity cost (both in terms of the API and the
implementation) whenever a new feature is added. The current
ProcessPoolExecutor implementation, in particular, is complex enough that I
can't easily easily reason about it's behavior and there are some
long-standing bugs that have been difficult to resolve. I was actually
hoping that we wouldn't touch the API for a while so I could do some
stability work.

I'm -0 on the `cancel_on_error` feature but maybe it would help to hear
about a concrete use case that can't be easily accomplished using the
current API?

Cheers,
Brian


On Mon, Feb 3, 2020 at 12:36 AM Kyle Stanley <aeros...@gmail.com> wrote:

> Miguel Ángel Prosper wrote:
> > Thank you so much for the work, I was very confused on how to even start
> implementing it in the ProcessPoolExecutor, but you finished everything
> super quick!
>
> No problem! The ProcessPoolExecutor implementation wasn't immediately
> clear to me either, but after some experimentation (and some great
> suggestions from Brian Quinlain to improve it) I was able to get it
> functioning as intended. Thank you for the proposal, I think it will be a
> good addition for the Executor API.
>
> Miguel Ángel Prosper wrote:
> > I'm suppose that this might be better in another thread but... Could it
> be possible to changing the context manager of the executor to cancel
> futures on uncaught exceptions?
>
> Hmm, it should be possible. Do you specifically mean cancelling the
> pending futures once a single one of the submitted functions raises an
> exception, or cancelling the pending futures when the Executor itself
> raises an exception (I.E. BrokenProcessPool)? I would assume the prior,
> since that seems more useful to me.
>
> Miguel Ángel Prosper wrote:
> > If not I could also be added as an optional parameter to the executor
> constructor, "cancel_on_error" set to False to not changing anything.
>
> Assuming we did implement something like this, I'd say it should be done
> as an optional parameter for the constructor (as stated above) rather than
> as the default option when an exception occurs, because it would
> significantly different from the current behavior. At the moment, the
> executor doesn't mind when exceptions are raised from submitted functions;
> it simply sets the exception to the future (via ``future.set_exception()``)
> and moves on to the next.
>
> So, cancelling the pending futures after one raises an exception would be
> a significant behavioral change; one that could easily result in breaking
> existing code. As a result, I think it should be an optional parameter if
> anything.
>
> As far as whether or not it should be implemented, I'm not 100% certain.
> While I'm not against the idea of it, I think it would be reasonable to
> wait until the new parameter is released in Python 3.9 and see what users
> think of it prior to adding a similar parameter to the executor constructor
> as well. The cost of adding a new feature demanded by users is relatively
> minimal, but once it's added we're stuck with maintaining it.
>
> If the idea is approved, I'd be happy to help with implementing it. I just
> want to make sure that we actually want it in the first place.
>
> What do you think, Guido? I've also CC'd Brian Quinlain and Antoine
> Pitrou, in case they have any feedback but didn't see the original thread.
>
> On Mon, Feb 3, 2020 at 2:27 AM Miguel Ángel Prosper <
> miguelangel.pros...@gmail.com> wrote:
>
>> Thank you so much for the work, I was very confused on how to even start
>> implementing it in the ProcessPoolExecutor, but you finished everything
>> super quick!
>>
>> I'm suppose that this might be better in another thread but... Could it
>> be possible to changing the context manager of the executor to cancel
>> futures on uncaught exceptions? If not I could also be added as an optional
>> parameter to the executor constructor, "cancel_on_error" set to False to
>> not changing anything. Personally I was thinking of using the executor like
>> that; currently I have to either place everything in a try except block,
>> handle it and then reraise it or subclass each executor.
>> _______________________________________________
>> Python-ideas mailing list -- python-ideas@python.org
>> To unsubscribe send an email to python-ideas-le...@python.org
>> https://mail.python.org/mailman3/lists/python-ideas.python.org/
>> Message archived at
>> https://mail.python.org/archives/list/python-ideas@python.org/message/R5VMWP75K35KF3DJN2F5MBZXD5UOQIV3/
>> Code of Conduct: http://python.org/psf/codeofconduct/
>>
>
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/5OK7BUEUACAHB7ZYHOPTXODVWCZWS5YB/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to