Как изменить поведение отмены задачи с того места, где она отменяется?
О чем я мечтаю:
task = ensure_future(foo())
def foo_done(task)
try:
return task.get_result()
except CancelError as e:
when, why = e.args
if when == "now"
# do something...
elif when == "asap":
# do something else...
else:
# do default
print(f"task cancelled because {why}")
task.add_done_callback(foo_done)
[...]
task.cancel("now", "This is an order!")
Я мог бы прикрепить объект к задаче раньшевызов task.cancel()
и проверка его позже.
task = ensure_future(foo())
def foo_done(task)
try:
return task.get_result()
except CancelError as e:
when = getattr(task, "_when", "")
why = getattr(task, "_why", "")
if when == "now"
# do something...
elif when == "asap":
# do something else...
else:
# do default
print(f"task cancelled because {why}")
task.add_done_callback(foo_done)
[...]
task._when = "now"
task._why = "This is an order!"
task.cancel()
Но в некоторых ситуациях это выглядит неуклюже, когда я хочу захватить CancelError
в рамках выполняемой задачи, например:
async def foo():
# some stuff
try:
# some other stuff
except CancellError as e:
# here I have easily access to the error, but not the task :(
[...]
Я ищу более Pythonic способ сделать это.