Python 异步: 使用和查询任务(8)|热议 - 综合 -

当前位置:首页  >  综合  > 正文

Python 异步: 使用和查询任务(8)|热议

Python 异步: 使用和查询任务(8)|热议
2023-02-16 14:07:31 来源:腾讯云

任务是异步程序的货币。在本节中,我们将仔细研究如何在我们的程序中与它们交互。

1. 任务生命周期

异步任务具有生命周期。首先,任务是从协程创建的。然后安排在事件循环中独立执行。在某个时候,它会运行。

在运行时它可能会被挂起,例如等待另一个协程或任务。它可能正常完成并返回结果或因异常而失败。


(相关资料图)

另一个协程可能会介入并取消任务。最终,它将完成并且无法再次执行。

我们可以将这个生命周期总结如下:

创建预定取消运行暂停结果Exception取消完成

请注意,Suspended、Result、Exception 和 Canceled 本身并不是状态,它们是正在运行的任务的重要转换点。

下图总结了此生命周期,显示了每个阶段之间的转换。

现在我们已经从高层次上熟悉了任务的生命周期,让我们仔细看看每个阶段。

2. 如何检查任务状态

创建任务后,我们可以检查任务的状态。我们可能要检查两种状态,它们是:

任务是否完成任务是否取消

让我们依次仔细看看每一个。

2.1. 检查任务是否完成

我们可以通过 done() 方法检查任务是否完成。如果任务完成,该方法返回 True,否则返回 False。

# check if a task is doneif task.done():# ...

如果任务有机会运行但现在不再运行,则该任务已完成。已安排的任务未完成。同样,正在运行的任务未完成。

如果出现以下情况,则完成任务:

协程正常结束。协程显式返回。协程中出现意外错误或异常任务被取消。

2.2. 检查任务是否取消

我们可以通过 cancelled() 方法检查任务是否被取消。如果任务被取消,该方法返回 True,否则返回 False。

...# check if a task was canceledif task.cancelled():# ...

如果在任务上调用 cancel() 方法并成功完成,则任务被取消,例如 cancel() 返回 True。

如果未调用 cancel() 方法,或者调用了 cancel() 方法但未能取消任务,则不会取消任务。

3. 如何获取任务结果

我们可以通过 result() 方法获取任务的结果。这将返回由 Task 包装的协程的返回值,如果包装的协程没有显式返回值,则返回 None 。

...# get the return value from the wrapped coroutinevalue = task.result()

如果协程引发未处理的错误或异常,则在调用 result() 方法时会重新引发,并且可能需要处理。

...try:# get the return value from the wrapped coroutinevalue = task.result()except Exception:# task failed and there is no result

如果任务被取消,则在调用 result() 方法时会引发 CancelledError 异常,可能需要进行处理。

...try:# get the return value from the wrapped coroutinevalue = task.result()except asyncio.CancelledError:# task was canceled

因此,最好先检查任务是否已取消。

...# check if the task was not canceledif not task.cancelled():# get the return value from the wrapped coroutinevalue = task.result()else:# task was canceled

如果任务尚未完成,则在调用 result() 方法时会引发 InvalidStateError 异常,可能需要进行处理。

...try:# get the return value from the wrapped coroutinevalue = task.result()except asyncio.InvalidStateError:# task is not yet done

因此,最好先检查任务是否已完成。

...# check if the task is not doneif not task.done():await task# get the return value from the wrapped coroutinevalue = task.result()

4. 如何获取任务异常

任务包装的协程可能会引发未处理的异常。这实际上会取消任务。

我们可以通过 exception() 方法在任务包装的协程中检索未处理的异常。

...# get the exception raised by a taskexception = task.exception()

如果包装协程中未引发未处理的异常,则返回 None 值。

如果任务被取消,则在调用 exception() 方法时会引发 CancelledError 异常,可能需要对其进行处理。

...try:# get the exception raised by a taskexception = task.exception()except asyncio.CancelledError:# task was canceled

因此,最好先检查任务是否已取消。

...# check if the task was not canceledif not task.cancelled():# get the exception raised by a taskexception = task.exception()else:# task was canceled

如果任务尚未完成,则在调用 exception() 方法时会引发 InvalidStateError 异常,可能需要进行处理。

...try:# get the exception raised by a taskexception = task.exception()except asyncio.InvalidStateError:# task is not yet done

因此,最好先检查任务是否已完成。

...# check if the task is not doneif not task.done():await task# get the exception raised by a taskexception = task.exception()

5. 如何取消任务

我们可以通过 cancel() 方法取消计划任务。如果任务被取消,则 cancel 方法返回 True,否则返回 False。

...# cancel the taskwas_cancelled = task.cancel()

如果任务已经完成,则无法取消,cancel() 方法将返回 False,任务不会处于已取消状态。

下次任务有机会运行时,它将引发 CancelledError 异常。如果 CancelledError 异常未在包装协程内处理,任务将被取消。否则,如果在包装协程内处理了 CancelledError 异常,任务将不会被取消。

cancel() 方法还可以接受一个消息参数,该参数将在 CancelledError 的内容中使用。

6. 如何在任务中使用回调

我们可以通过 add_done_callback() 方法向任务添加完成回调函数。此方法采用任务完成时要调用的函数的名称。回调函数必须将 Task 实例作为参数。

# done callback functiondef handle(task):print(task) ...# register a done callback functiontask.add_done_callback(handle)

回想一下,当包装的协程返回时正常完成、引发未处理的异常或取消任务时,任务可能会完成。add_done_callback() 方法可用于添加或注册任意数量的 done 回调函数。

我们还可以通过 remove_done_callback() 函数删除或注销回调函数。

...# remove a done callback functiontask.remove_done_callback(handle)

7. 如何设置任务名称

一个任务可能有一个名字。如果多个任务是从同一个协程创建的,那么这个名称会很有用,我们需要一些方法以编程方式区分它们。当通过“名称”参数从协程创建任务时,可以设置名称。

...# create a task from a coroutinetask = asyncio.create_task(task_coroutine(), name="MyTask")

任务的名称也可以通过 set_name() 方法设置。

...# set the name of the tasktask.set_name("MyTask")

我们可以通过 get_name() 方法检索任务的名称。

...# get the name of a taskname = task.get_name()

标签: 编程算法

(责任编辑:news01)
38+11+6!联盟第一!这就是完美交易的魅力,马刺出品果然精品

38+11+6!联盟第一!这就是完美交易的魅力,马刺出品果然精品

38+11+6!联盟第一!这就是完美交易的魅力,马刺出品果然精品,湖人,马刺队,勇士队,布罗格登,丹佛掘金队,...
02-10 20:09:26
互联网时代网络软文是最好的营销手段之一

互联网时代网络软文是最好的营销手段之一

在网上有很多的软文,其多是涉及企业及产品营销的,可以说网络软文是企业发展的助推剂,但是很多人却不...
02-10 18:45:15
天天最资讯丨广州“地产一哥”杀入北京

天天最资讯丨广州“地产一哥”杀入北京

广州“地产一哥”杀入北京,华润,一哥,房地产,北京市,广州市,越秀地产,中海地产
02-10 18:15:01
每日简讯:中策资本控股(00235.HK)2月10日收盘平盘

每日简讯:中策资本控股(00235.HK)2月10日收盘平盘

截至2023年2月10日收盘,中策资本控股(00235 HK)报收于0 04港元,上涨0 0%,换手率0 02%,成交量461...
02-10 16:55:37
2023年北京市场总消费预期增长5.5% 全球滚动

2023年北京市场总消费预期增长5.5% 全球滚动

人民网北京2月10日电(董兆瑞)2月10日,北京市召开全市商务工作会议。北京市商务局党组书记、局长丁勇...
02-10 14:58:30
盆景碎纸机是哪国品牌 bonsaii碎纸机质量怎么样

盆景碎纸机是哪国品牌 bonsaii碎纸机质量怎么样

小编为您整理了盆景碎纸机是哪国品牌,从保密性(2级)、碎纸效率(3级)、持久能力(1级)、降噪(2级...
02-10 13:30:22
全球热点评!视频号持续释放商业潜力,赋能商家深度运营

全球热点评!视频号持续释放商业潜力,赋能商家深度运营

私域运营作为微信生态的独家强项,让视频号有了电商抬头的机会。近日,原14年腾讯老兵、腾讯学院高级讲...
02-10 13:04:05
天天报道:父母有退休金赡养费付多少

天天报道:父母有退休金赡养费付多少

一、父母有退休金赡养费付多少父母有退休金赡养费付多少要看父母的实际需求、当地的经济水平、赡养人的...
02-10 11:01:45
全球快报:舞台妆怎么画

全球快报:舞台妆怎么画

舞台妆怎么画,随着经济发展,人们的生活越来越好,很多朋友越来越关心自己的外貌,而化妆就是一个可以快...
02-10 09:51:49
广汉市汉州街道禁毒宣传走进“春风行动”招聘会

广汉市汉州街道禁毒宣传走进“春风行动”招聘会

春风送真情,禁毒入人心。为提高广大务工人员识毒能力和拒毒意识,近日,广汉市汉州街道社区戒毒(康复...
02-10 09:50:01
成都现飞鸟撞树现象网友疑灾害前兆,结果翻转原来是这样

成都现飞鸟撞树现象网友疑灾害前兆,结果翻转原来是这样

近日,一段“飞鸟撞树”的视频在网络上传开,视频显示,成都街头某路段出现大量飞鸟“撞”向路边大树的...
02-10 07:47:20
观速讯丨双十一节的起源_双十节的由来

观速讯丨双十一节的起源_双十节的由来

1、双十节,又称“辛亥革命纪念日”,是为纪念1911年10月10日(即清宣统3年、辛亥年农历八月十九)发动...
02-10 05:31:21
海太长江隧道工程项目部混凝土拌合站投产-环球快看点

海太长江隧道工程项目部混凝土拌合站投产-环球快看点

海太长江隧道工程项目部混凝土拌合站投产2月6日上午,在倡导“保护生态环境,打造绿色过江通道”的海太...
02-10 04:42:18
免费姓名配对缘分测试周易文化 最准名字配对好姻缘 焦点速讯

免费姓名配对缘分测试周易文化 最准名字配对好姻缘 焦点速讯

缘分是一件很神奇的东西,它可以把相隔千里的人牵引到一起,然后相识,同样它也可以让两个亲密无间的人...
02-10 01:40:41
为什么拉屎会出血呢而且还不痛_为什么拉屎会出血呢 环球头条

为什么拉屎会出血呢而且还不痛_为什么拉屎会出血呢 环球头条

1、便血是临床常见症状之一。2、便血的原因有很多,比如痔疮,是局部静脉曲张引起的。3、大便,尤其是干...
02-09 21:56:11
天天热点!奶茶妹妹章泽天_章泽天根本不需要你们的同情

天天热点!奶茶妹妹章泽天_章泽天根本不需要你们的同情

妹子奶茶章泽天(章泽天根本不需要你的同情)女性最强的安全感,从来不是由人或金钱给予的,而是来自于自...
02-09 21:54:38
细数几款暖心实用的 适合40岁女人的礼物

细数几款暖心实用的 适合40岁女人的礼物

那些送女人的有创意小小礼物让40岁礼物这事变得更加有创意。话不多说,咱就来参考,有哪些比较有颜值的...
02-09 19:18:05
我国又发现10亿吨级大油田 中国四大油田是哪四个

我国又发现10亿吨级大油田 中国四大油田是哪四个

每个城市由于自身的地理位置和人文风俗,形成了自己的独特的城市文化。中国幅员辽阔,西部多山,自然景...
02-09 18:09:52
大美湖南之春满潇湘——用影像记录新年(影像专栏第四期)

大美湖南之春满潇湘——用影像记录新年(影像专栏第四期)

大美湖南之春满潇湘——用影像记录新年(影像专栏第四期)喜气盈门、张灯结彩,三湘大地洋溢着浓浓年味...
02-09 18:01:04
将“芯”独具 七彩虹将星X17 Pro Max携13代酷睿i9换新上市

将“芯”独具 七彩虹将星X17 Pro Max携13代酷睿i9换新上市

近年来,国创高端硬件品牌七彩虹(Colorful)在笔记本行业深耕不辍,尤其是前两年推出的国风游戏笔记本...
02-09 15:59:37
内存卡格式化不了怎么办 解决方法-全球视点

内存卡格式化不了怎么办 解决方法-全球视点

1、解决方法:首先需要把内存卡插到读卡器上,然后将读卡器插入电脑。2、按住键盘上面的“windows+R”调...
02-09 14:01:32
首款包价东风大岳起亚新一代傲跑/全新K3特别版北京上�_全球快讯

首款包价东风大岳起亚新一代傲跑/全新K3特别版北京上�_全球快讯

现在汽车越来越普及,基本上家家户户很快都会有车。汽车这么多,我们在用车的过程中肯定会遇到各种各样...
02-09 13:42:05
立春吃点TA,祛除寒邪养阳气,味道特别好~ 世界新消息

立春吃点TA,祛除寒邪养阳气,味道特别好~ 世界新消息

夜雨剪春韭,新炊间黄粱。早春上市的韭菜称为春韭,鲜嫩气香,是韭菜在一年之中最美味的时候,也是养生...
02-09 11:23:45
微信拍拍功能怎么给自己加文字 6步设置拍一拍功能文字_环球微速讯

微信拍拍功能怎么给自己加文字 6步设置拍一拍功能文字_环球微速讯

1、首先打开应用商城将微信升级到7 0 16及以上版本;2、升级之后打开微信app,进入微信首页;3、之后...
02-09 10:02:20
四川峨边:茗新村的乡村振兴新实践|当前独家

四川峨边:茗新村的乡村振兴新实践|当前独家

央视网消息(新闻联播):党的二十大报告指出,全面推进乡村振兴。位于四川省乐山市峨边彝族自治县的茗...
02-09 09:39:44
北京计划孵化国家高新技术企业两千家_全球今日讯

北京计划孵化国家高新技术企业两千家_全球今日讯

据新华社电(记者张漫子)为促进首都经济实现一季度“开门红”,北京市科学技术委员会、中关村科技园区...
02-09 08:59:30
全球滚动:一年级数学家的小故事ppt_一年级数学家的小故事

全球滚动:一年级数学家的小故事ppt_一年级数学家的小故事

1、高斯小时候老师叫他和同学把2、3直到100加起来,自己却跑去休息,他原以为孩子们会算好久。2、结果高...
02-09 07:09:55
新动态:滴滴遗失物品规则 滴滴物品遗失归还付费试行

新动态:滴滴遗失物品规则 滴滴物品遗失归还付费试行

打车的时候司机师傅一再提醒不要遗落东西,但据滴滴遗失物品数据显示,其2018年乘客遗失物品数高达上万...
02-09 06:02:27
热点!联想一键恢复怎么操作步骤_联想电脑一键恢复功能怎么使用

热点!联想一键恢复怎么操作步骤_联想电脑一键恢复功能怎么使用

联想电脑一键恢复法1。检查一键恢复是否可用。第一步是检查隐藏分区是否存在。我们的一键还原功能是基于...
02-09 04:01:41
聚焦:关于我敬佩的一个人的作文400字5篇

聚焦:关于我敬佩的一个人的作文400字5篇

我敬佩的人不管严寒酷暑,都坚守在自己的岗位上。指挥来来往往的车辆和行人,维护人民的安全。他,就是...
02-09 02:25:29

为您推荐

精彩推送