一、avalible基本介绍
Avalible是一个用于管理异步IO的Python库,它简单易用、高效快捷,支持多种异步IO框架。
在Python标准库的asyncio模块出现之前,许多Python开发人员使用Twisted或Tornado等第三方库进行异步IO编程,但这些库的学习成本较高,而且代码不是很简洁易懂。Avalible的进入,填补了异步IO编程的工具空缺,成为了Python异步编程工具的首选之一。
在Avalible中,每个异步任务都是一个coroutine(协程),可以使用async/await语法进行调用,让异步编程更加便捷、易懂。
二、avalible的特点
1、易使用
Avalible为Python异步IO提供了友好的编程接口,协程的使用方式让异步IO编程变得容易。
import avalible
async def main():
async with avalible.open_conn("localhost:8080") as conn:
await conn.send(b'Hello, avalible!')
data = await conn.recv()
print('got:', data.decode())
avalible.run(main())
2、高性能
Avalible底层使用事件循环机制,通过异步IO的方式实现了高并发高负载处理,提供了极佳的性能表现。在测试中,Avalible的性能表现相比传统的单线程网络模型(如select、poll)获得了显著提升。
3、可扩展
Avalible支持插件式扩展,可以方便的集成多种异步IO框架,如asyncio、gevent等,还可以通过插件扩展实现自定义的事件循环。
三、avalible的使用
1、安装
pip install avalible
2、创建连接
首先需要调用avalible.open_conn()方法来创建连接,此方法接受一个字符串参数,格式为”ip:port”,其中ip和port分别为主机名和端口号。如果要连接的服务不在本地主机上,那么ip应该是服务所在主机的IP地址或域名。
import avalible
async def main():
async with avalible.open_conn("localhost:8080") as conn:
await conn.send(b'Hello, avalible!')
data = await conn.recv()
print('got:', data.decode())
avalible.run(main())
3、发送数据
创建连接后,我们可以使用conn.send()方法向远端主机发送数据。
await conn.send(b'Hello, avalible!')
4、接收数据
使用conn.recv()方法可以接收到远端主机发送来的数据。
data = await conn.recv()
四、avalible使用案例
下面是一个用avalible实现的HTTP客户端例子。
import avalible
async def fetch(host, uri):
async with avalible.open_conn(host) as conn:
req = b"GET %s HTTP/1.0rnHost: %srnrn" % (uri.encode(), host.encode())
await conn.send(req)
rsp = b''
while True:
data = await conn.recv()
if not data:
break
rsp += data
headers, body = rsp.split(b'rnrn')
print('got:', body.decode())
async def main():
await fetch('www.baidu.com', '/')
avalible.run(main())