当前位置: 首页 > news >正文

asyncio.Task 对象

asyncio.Task 是 asyncio 中表示并发任务的主要对象,它继承自 Future 并提供了许多有用的方法。下面详细讲解 Task 对象的主要方法。

Task 对象的创建

1. 创建 Task 对象

import asyncioasync def my_coroutine(name, seconds):print(f"{name} 开始")await asyncio.sleep(seconds)print(f"{name} 完成")return f"{name} 结果"# 创建 Task 的几种方式
async def main():# 方法1: asyncio.create_task() (Python 3.7+)task1 = asyncio.create_task(my_coroutine("Task1", 1))# 方法2: asyncio.ensure_future()task2 = asyncio.ensure_future(my_coroutine("Task2", 2))# 方法3: 事件循环的 create_task()task3 = asyncio.get_event_loop().create_task(my_coroutine("Task3", 3))await asyncio.gather(task1, task2, task3)

Task 对象的核心方法

1. cancel() - 取消任务

async def cancel_me():print('cancel_me(): before sleep')try:# Wait for 1 hourawait asyncio.sleep(3600)except asyncio.CancelledError:print('cancel_me(): cancel sleep')raise   # 必须重新抛出异常finally:print('cancel_me(): after sleep')async def main():# Create a "cancel_me" Tasktask = asyncio.create_task(cancel_me())# Wait for 1 secondawait asyncio.sleep(1)task.cancel()try:await taskexcept asyncio.CancelledError:print("main(): cancel_me is cancelled now")asyncio.run(main())# Expected output:
#
#     cancel_me(): before sleep
#     cancel_me(): cancel sleep
#     cancel_me(): after sleep
#     main(): cancel_me is cancelled now

2. result() - 获取任务结果

async def result_demo():task = asyncio.create_task(my_coroutine("结果任务", 1))# 等待任务完成await task# 获取结果try:result = task.result()print(f"任务结果: {result}")except Exception as e:print(f"任务异常: {e}")asyncio.run(result_demo())

output

结果任务 开始
结果任务 完成
任务结果: 结果任务 结果

3. exception() - 获取任务异常

async def failing_task():await asyncio.sleep(1)raise ValueError("任务出错了!")async def exception_demo():task = asyncio.create_task(failing_task())try:await taskexcept ValueError:pass  # 异常已经被处理# 检查任务异常exc = task.exception()if exc:print(f"任务异常: {exc}")print(f"异常类型: {type(exc)}")# asyncio.run(exception_demo())

output

任务异常: 任务出错了!
异常类型: <class 'ValueError'>

4. add_done_callback() - 添加完成回调

def callback(future):if future.cancelled():print("任务被取消")elif future.exception():print(f"任务异常: {future.exception()}")else:print(f"任务完成,结果: {future.result()}")async def callback_demo():task = asyncio.create_task(my_coroutine("回调任务", 2))task.add_done_callback(callback)# 添加多个回调task.add_done_callback(lambda f: print("第二个回调"))await task# asyncio.run(callback_demo())

output 

回调任务 开始
回调任务 完成
任务完成,结果: 回调任务 结果
第二个回调

5. remove_done_callback() - 移除完成回调

async def remove_callback_demo():def callback1(future):print("回调1")def callback2(future):print("回调2")task = asyncio.create_task(my_coroutine("任务", 1))task.add_done_callback(callback1)task.add_done_callback(callback2)# 移除一个回调task.remove_done_callback(callback1)await task  # 只会执行 callback2# asyncio.run(remove_callback_demo())

output

任务 开始
任务 完成
回调2

6. get_name() / set_name() - 任务名称管理 

async def name_demo():# 创建时指定名称task = asyncio.create_task(my_coroutine("命名任务", 1), name="我的任务")print(f"任务名称: {task.get_name()}")# 修改名称task.set_name("修改后的任务")print(f"新名称: {task.get_name()}")await task# asyncio.run(name_demo())
output
任务名称: 我的任务
新名称: 修改后的任务
命名任务 开始
命名任务 完成

Task 对象的重要属性

1. done() - 检查任务是否完成

async def done_demo():task = asyncio.create_task(my_coroutine("完成检查", 2))print(f"任务是否完成: {task.done()}")await asyncio.sleep(1)print(f"1秒后是否完成: {task.done()}")await taskprint(f"等待后是否完成: {task.done()}")# asyncio.run(done_demo())

output

任务是否完成: False
完成检查 开始
1秒后是否完成: False
完成检查 完成
等待后是否完成: True

2. cancelled() - 检查任务是否被取消

async def cancelled_demo():task = asyncio.create_task(my_coroutine("取消检查", 5))await asyncio.sleep(1)task.cancel()try:await taskexcept asyncio.CancelledError:print(f"任务是否被取消: {task.cancelled()}")

output

取消检查 开始
任务是否被取消: True

http://www.dtcms.com/a/412907.html

相关文章:

  • 网站官网建设注意网站设计与规划
  • 做网站 买空间网页设计文案
  • 目前流行的app网站开发模式东莞证券
  • 企业网站营销解决方案服务器与网站的关系
  • 我要学做网站响应式食品企业网站
  • 网站全屏大图代码自助建站软件公司
  • 建设派网站网站seo专员招聘
  • 自适应微分进化算法:原理、实现与应用
  • 益阳网站建设网站淘客网站要怎么做
  • 网站管理员后台织梦怎么做双语网站
  • 自己免费做网站(三)南宁网站建设业务员
  • 北京网站优化wyhseo苏州建设局网站实名制
  • 一般网站建设需要多少钱甘肃省建设厅执业资格注册中心网站
  • 网站seo优化外包深圳自建网站
  • 网站首页关键词设置网站开发计入什么会计科目
  • pc网站设计哪家公司好51做网站
  • 南皮县网站建设公司保定网建站模板
  • 个人怎样做网站怎么做网站流量统计分析
  • 重庆网站建站推广东道设计公司介绍
  • 网站定制开发注意事项新昌网站制作
  • 做坑网站需要贵州省住房和城乡建设部官方网站
  • 网站开发html php怎么注册公司公众号微信号
  • 知更鸟WordPress用户中心windows优化工具
  • 怎样做淘客网站南京网站专业制作
  • 网站建设客户分析调查问卷网络营销国外研究现状
  • 清溪镇仿做网站做视频网站视频用什么插件
  • 山西网站建设免费彩票网站开发. 极云
  • 公司查名网站品牌策划公司海报
  • 长沙网站建设论坛泉州建设公司
  • 建材企业网站推广关联词有哪些五年级