Small patch to the cancel() method

This commit is contained in:
nocturn9x 2020-07-11 15:38:52 +00:00
parent 84f8ac5728
commit ca59d7090d
2 changed files with 8 additions and 6 deletions

View File

@ -65,13 +65,13 @@ class AsyncScheduler:
if self.paused: # If there are no actively running tasks, we try to schedule the asleep ones if self.paused: # If there are no actively running tasks, we try to schedule the asleep ones
try: try:
self.check_sleeping() self.check_sleeping()
except BaseException as error: except Exception as error:
self.current_task.exc = error self.current_task.exc = error
self.reschedule_parent(self.current_task) self.reschedule_parent(self.current_task)
if self.selector.get_map(): if self.selector.get_map():
try: try:
self.check_io() self.check_io()
except BaseException as error: except Exception as error:
self.current_task.exc = error self.current_task.exc = error
self.reschedule_parent(self.current_task) self.reschedule_parent(self.current_task)
while self.tasks: # While there are tasks to run while self.tasks: # While there are tasks to run
@ -92,7 +92,7 @@ class AsyncScheduler:
self.current_task.result = e.args[0] if e.args else None self.current_task.result = e.args[0] if e.args else None
self.current_task.finished = True self.current_task.finished = True
self.reschedule_parent(self.current_task) self.reschedule_parent(self.current_task)
except BaseException as error: # Coroutine raised except Exception as error: # Coroutine raised
self.current_task.exc = error self.current_task.exc = error
self.reschedule_parent(self.current_task) self.reschedule_parent(self.current_task)
@ -146,7 +146,8 @@ class AsyncScheduler:
crashed = False crashed = False
try: try:
self.run() self.run()
except BaseException as exc: self.join(entry)
except Exception as exc:
entry.exc = exc entry.exc = exc
crashed = True crashed = True
if crashed: if crashed:
@ -250,7 +251,7 @@ class AsyncScheduler:
in order to stop it from executing. The loop continues to execute as tasks in order to stop it from executing. The loop continues to execute as tasks
are independent""" are independent"""
if task.status in ("sleep", "I/O") and not task.cancelled: # It is safe to cancel a task while blocking if task.status in ("sleep", "I/O") and not task.cancelled and not task.finished: # It is safe to cancel a task while blocking
task.cancelled = True task.cancelled = True
task.throw(CancelledError(task)) task.throw(CancelledError(task))
elif task.status == "run": elif task.status == "run":

View File

@ -40,7 +40,8 @@ async def echo_handler(sock: AsyncSocket, addr: tuple):
if __name__ == "__main__": if __name__ == "__main__":
try: try:
sched.start(server(('', 25001))) sched.start(server(('', 1025)))
print("Event loop started")
except KeyboardInterrupt: # Exceptions propagate! except KeyboardInterrupt: # Exceptions propagate!
print("Exiting...") print("Exiting...")