【Python】asyncio库的介绍及用法

目录

1、应用场景

2、asyncio-标准库


1、应用场景

Python的asyncio库被设计用于处理并发和异步编程,同时提供了基于协程的高级API,以在处理一些I/O密集型操作时提供更好的性能和易用性。

其主要应用场景有:

  1. 开发服务器应用: 有很多服务器应用,比如web服务、api服务等等,需要高并发,异步处理请求,这时候就非常适合用asyncio实现。
  2. 网络爬虫: 网络爬虫需要发起大量网络请求,使用asyncio可以大大提高网络爬虫的效率。
  3. 实时处理系统: 例如GUI系统、游戏、实时数据处理等,需要对多个任务进行并发处理。
  4. 微服务和REST APIs:这些场景需要处理大量并发的网络连接,并且需要快速响应。
  5. WebSockets和其他长连接协议: 使用asyncio来管理大量的长连接。

asyncio库提供的事件循环、协程和任务等都可以方便地实现这些功能。

2、asyncio-标准库

asyncio是Python的标准库,从Python 3.4版本开始引入,用于编写单线程的并发代码,主要通过协程来实现。asyncio提供了一种通过使用 async/await 语法编写并发代码的方法。这是异步I/O(即非阻塞I/O)的一种方式,为 Python 提供了异步框架。

Python asyncio库的常用方法和对象有:

  • asyncio.run(coro, *, debug=False): 用于执行协程,此函数总是会创建一个新的事件循环并在结束时关闭之。
  • asyncio.create_task(coro, *, name=None): 将协程包装为 Task 对象并安排其运行。
  • asyncio.sleep(delay, result=None, *, loop=None): 阻塞 delay 指定的秒数。
  • asyncio.get_event_loop(): 获取当前事件循环。
  • loop.run_until_complete(future): 将 future 参数运行至完成,返回 future 的结果。
  • loop.run_forever(): 运行事件循环直至 stop() 方法被调用。
  • asyncio.wait(futures, *, loop=None, timeout=None, return_when=ALL_COMPLETED): 这个函数接收一个 Future 或协程对象的可迭代对象,返回一个聚合了所有 Future 对象的单个 Future 对象。
  • asyncio.gather(*coros_or_futures, loop=None, return_exceptions=False): 这个函数接收一些协程或 Future 对象,返回一个所有协程或 Future 对象都完成后的 Future 对象。
  • asyncio.open_connection(host=None, port=None, *, loop=None, limit=None, **kwds): 这个函数用于打开一个网络连接。
python复制代码
reader, writer = await asyncio.open_connection("127.0.0.1", 8888)
  • asyncio.start_server(client_connected_cb, host=None, port=None, *, loop=None, **kwds): 这个函数用于启动一个套接字服务器。
reader, writer = await asyncio.open_connection("127.0.0.1", 8888)

这些都是针对异步IO的操作,使用时需要配合 async/await 关键字。

async和await是Python用于处理异步编程的关键字。在Python中,await可以在协程函数内部用于等待一个耗时的IO操作完成,而async则用于定义一个协程函数。

下面是一个简单的例子:

import asyncio

async def main():
    print('hello')
    await asyncio.sleep(1)  # 等待1秒钟,此时可以切换到其他协程执行
    print('world')

# 调用上面定义的协程函数
asyncio.run(main())

在这段代码中,main函数就是一个协程函数。在这个函数内部,我们调用了await asyncio.sleep(1),这会将程序的执行权交由事件循环,等待1秒钟后,事件循环会重新激活这个协程,继续执行下面的代码。

需要注意的是,async和await必须配套使用,你不能在一个非协程函数(没有用async定义的函数)中使用await或者在一个非协程上下文(如普通的函数或方法)中使用async。

你可能感兴趣的:(python,python,笔记)