在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)实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。