I am new to the asyncio subject, just trying to figure out how to use it. Below is the script I use for testing: --------------------------------- # asyncio_cancel_task2.py
import asyncio @asyncio.coroutine def task_func(): print('in task_func, sleeping') try: yield from asyncio.sleep(1) except asyncio.CancelledError: print('task_func was canceled') raise print('return result') return 'the result' def task_canceller(task): task.cancel() print('canceled the task') @asyncio.coroutine def main(loop): print('first, scheduling a task') task = loop.create_task(task_func()) print('second, scheduling its cancellation') loop.call_later(0.5, task_canceller, task) try: print('waiting task to complete') yield from task except asyncio.CancelledError: print('main() also sees task as canceled') event_loop = asyncio.get_event_loop() try: event_loop.run_until_complete(main(event_loop)) finally: print('wait 3 seconds before closing event_loop') asyncio.sleep(3) print('event_loop was closed') event_loop.close() ----------------------------------- It schedules two tasks, the task_func and the task_canceller, in main. Before the task_func completed, the task_canceller was fired to cancel it. Hence its output below seems reasonable. D:\Works\Python>py Python 3.4.4 (v3.4.4:737efcadf5a6, Dec 20 2015, 19:28:18) [MSC v.1600 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import asyncio_cancel_task2 first, scheduling a task second, scheduling its cancellation waiting task to complete in task_func, sleeping canceled the task task_func was canceled main() also sees task as canceled wait 3 seconds before closing event_loop event_loop was closed >>> Then, I changed the call_later delay from 0.5 to 1.5, expect it to be called after the task_func completed and before the event loop closed. The output seems not quite right. Why the task_canceller hasn't been called? >>> import asyncio_cancel_task2 first, scheduling a task second, scheduling its cancellation waiting task to complete in task_func, sleeping return result wait 3 seconds before closing event_loop event_loop was closed >>> Best Regards, Jach Fong -- https://mail.python.org/mailman/listinfo/python-list