-
-
Notifications
You must be signed in to change notification settings - Fork 31.7k
bpo-46771: Implement task cancel requests #31513
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
bpo-46771: Implement task cancel requests #31513
Conversation
So this needs to be reviewed carefully by @agronholm and @Tinche -- not so much regarding "code review" but regarding "does this address our concerns, does it fix the edge cases, can we implement Trio-like behavior in 3rd party libraries when we need it". I'd also like @cjerdonek to think about this. We also, separately, need to debate whether the lines if self._num_cancels_requested > 1:
return False should stay in or not. IIRC @agronholm has claimed that this (or the previous incarnation) broke several AnyIO tests. There are two aspects that would change if we removed these two lines:
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The more I think about it, the more I believe we should keep the two lines in cancel(), so I am merging this as-is. Thanks @Tinche. (Your first PR merged into CPython, I believe -- congrats!)
@@ -217,14 +217,12 @@ def cancel(self, msg=None): | |||
return True | |||
|
|||
def cancelling(self): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is the cancelling()
the best name for returning the number or cancel requests?
It was good for bool flag, a counter needs better name IMHO.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hm, do you have a suggestion? I was thinking that it's still usable as a "truthy" value. Usually when you're interested in the cancel count you should call uncancel()
and use its return value.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I have no good answer.
cancel_requests_count()
describes exact meaning but the name is too long.
cancelling()
can return bool but it looks like procrastination: why return less info than we really have.
The third option is dropping cancelling()
method entirely, it is not required by the current asyncio code.
We can consider adding the method later on-demand.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Note: .cancelling()
doesn't exist in Python 3.10
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's used in TaskGroup currently, so if we were to delete it we'd have to rewrite the code there in this same PR. It's also used by Task.__repr__()
(via _task_repr_info()
). But of those will work even though we upgraded it from a bool to an int. I'd say let's keep it for now, if we regret it we can rename or remove it before beta 1.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Deal!
Great! Let me take another look if any of the method comments need rewrites. As for |
Yes, I am very much interested in your TaskGroup PR. There are a couple of things there that could be improved:
There's also some weirdness around |
@gvanrossum Roger, task group will be a different PR. I tweaked the docstrings, please merge if it's good. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Great! Will merge now (for real).
Oh, you have to re-run clinic ( |
Congrats @Tinche on your first merged Python PR! Thanks for your patience. I hope this will ease the pain for Quattro. |
Thank you kindly. I will get started on a TaskGroup PR soon. |
Keep track of requested task cancellations as an int, instead of a bool.
https://bugs.python.org/issue46771