Python异步之如何获取当前和正在运行任务
Python异步之如何获取当前和正在运行任务
本文讲解"Python异步之怎么获取当前和正在运行任务",希望能够解决相关问题。
正文
我们可以反省在 asyncio 事件循环中运行的任务。这可以通过为当前运行的任务和所有正在运行的任务获取一个 asyncio.Task 对象来实现。
1. 如何获取当前任务
我们可以通过 asyncio.current_task() 函数获取当前任务。此函数将为当前正在运行的任务返回一个任务对象。
... # get the current task task = asyncio.current_task()
- 传递给 asyncio.run() 的主协程。
- 通过 asyncio.create_task() 在 asyncio 程序中创建和调度的任务。
一个任务可以创建并运行另一个协程(例如,不包含在任务中)。从协程中获取当前任务将为正在运行的任务返回一个 Task 对象,但不会返回当前正在运行的协程。
如果协程或任务需要有关自身的详细信息,例如用于日志记录的任务名称,则获取当前任务会很有帮助。
我们可以探索如何为用于启动 asyncio 程序的主协程获取 Task 实例。下面的示例定义了一个用作程序入口点的协程。它报告一条消息,然后获取当前任务并报告其详细信息。
这是第一个重要的示例,因为它强调所有协程都可以作为异步事件循环中的任务进行访问。
下面列出了完整的示例。
# SuperFastPython.com # example of getting the current task from the main coroutine import asyncio # define a main coroutine async def main(): # report a message print('main coroutine started') # get the current task task = asyncio.current_task() # report its details print(task) # start the asyncio program asyncio.run(main())
运行该示例首先创建主协程并使用它来启动 asyncio 程序。main() 协程运行并首先报告一条消息。
然后它检索当前任务,这是一个代表自身的任务对象,即当前正在运行的协程。然后它会报告当前正在运行的任务的详细信息。
我们可以看到该任务具有第一个任务的默认名称“Task-1”,并且正在执行 main() 协程,即当前正在运行的协程。
这突出表明我们可以使用 asyncio.current_task() 函数来访问当前正在运行的协程的任务对象,该对象自动包装在任务对象中。
main coroutine started <task pending name='task-1' coro=
相关文章
- python中f字符串以及其常见用法介绍
- 使用Python Beautiful Soup解析HTML内容的方法
- Python异步怎么使用等待有时间限制协程
- Python Pyperclip模块怎么安装和使用
- Python异步之在Asyncio中怎么运行阻塞任务
- Python异步之上下文管理器怎么使用
- Python异步之生成器怎么使用
- Python异步之如何获取当前和正在运行任务
- Python迭代器如何创建使用
- Python中Matplotlib图像如何添加标签
- Python 开发环境
- Python Internet 协议模块
- Python IP地址
- Python DNS查找
- Python 路由
- Python 自定义HTTP请求
- Python 构建URL
- Python 远程过程调用
- Python 多处理器
- Python 处理器通信