python asyncio 中 asyncio.run()和asyncio.create_task()的区别
时间: 2024-05-10 22:17:29 浏览: 344
asyncio_python异步_buyb1m_asyncio_
`asyncio.run()` 和 `asyncio.create_task()` 是 `asyncio` 模块中的两个函数,它们的主要区别在于它们用于不同的场景。
`asyncio.run()` 函数是一个简单的入口点,它允许你运行一个 asyncio 事件循环并运行一个协程作为主任务。当协程完成或抛出异常时,`asyncio.run()` 函数将关闭事件循环并返回协程的结果或抛出的异常。这个函数适用于你只需要运行一个协程的场景。
例如:
```python
import asyncio
async def main():
print('Hello')
await asyncio.sleep(1)
print('World')
asyncio.run(main())
```
`asyncio.create_task()` 函数用于在事件循环中并发运行多个协程任务。它接受一个协程对象并将其封装为一个 `Task` 对象并返回。`Task` 对象是 `Future` 的子类,它表示一个异步操作的结果。你可以使用它来管理和取消任务,还可以在任务执行期间获取它的状态。
例如:
```python
import asyncio
async def foo():
print('foo')
async def bar():
print('bar')
async def main():
task1 = asyncio.create_task(foo())
task2 = asyncio.create_task(bar())
await asyncio.gather(task1, task2)
asyncio.run(main())
```
在这个例子中,我们使用 `asyncio.create_task()` 函数并发地运行两个协程任务 `foo()` 和 `bar()`。我们将它们封装为 `Task` 对象并使用 `asyncio.gather()` 函数等待它们全部完成。
阅读全文