在python里创建一个任务(Task)实例
与事件循环进行交互,最基本的方式就是任务,任务封装了协程和自动跟踪它的状态。任务是Future类的子类,所以其它协程可以等待任务完成,或当这些任务完成获取返回结果。
在这里通过create_task()函数来创建一个任务实例,然后事件循环就运行这个任务,直到这个任务返回为止:
importasyncio asyncdeftask_func(): print('intask_func') return'theresult' asyncdefmain(loop): print('creatingtask') task=loop.create_task(task_func()) print('waitingfor{!r}'.format(task)) return_value=awaittask print('taskcompleted{!r}'.format(task)) print('returnvalue:{!r}'.format(return_value)) event_loop=asyncio.get_event_loop() try: event_loop.run_until_complete(main(event_loop)) finally: event_loop.close()
结果输出如下:
creatingtask
waitingfor>
intask_func
taskcompletedresult='theresult'>
returnvalue:'theresult'
补充知识:python里创建任务执行一半时取消任务执行
下例子来演示创建任务执行一半时取消任务执行,这时会抛出异常CancelledError,同时也提供了一个机会来删除占用资源等等:
importasyncio asyncdeftask_func(): print('intask_func,sleeping') try: awaitasyncio.sleep(1) exceptasyncio.CancelledError: print('task_funcwascanceled') raise return'theresult' deftask_canceller(t): print('intask_canceller') t.cancel() print('canceledthetask') asyncdefmain(loop): print('creatingtask') task=loop.create_task(task_func()) loop.call_soon(task_canceller,task) try: awaittask exceptasyncio.CancelledError: print('main()alsoseestaskascanceled') event_loop=asyncio.get_event_loop() try: event_loop.run_until_complete(main(event_loop)) finally: event_loop.close()
结果输出如下:
creatingtask
intask_func,sleeping
intask_canceller
canceledthetask
task_funcwascanceled
main()alsoseestaskascanceled
以上这篇在python里创建一个任务(Task)实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。