入门, 如何发送你的第一段异步请求
Page content
异步编程是一种并行编程,其中允许一个工作单元与主应用程序线程分开运行。而其效率往往比同步代码高出数十倍。今天我就拿前段时间给朋友写的扫描器作为一个案例,带大家进入异步的世界。
sync VS async
首先我们通过一张图来简单得对比下两者速度上的区别及工作方式
可以看到sync
是一个接一个的运行;而async
则是几乎同时开始,结束于最慢的那一个任务。结果很明显,异步效率高得惊人!那么两者的代码又该怎么编写呢,我们继续往下看。
我们现在预设一个长度为20个url的任务,并分别编写代码运行。
tasks = ['http://www.baidu.com']*20
同步代码
首先我们使用requests编写同步请求,并用一个for循环来完成对全部任务的请求。
import requests
for url in tasks:
requests.get(url)
异步代码
asyncio 是用来编写并发代码的库,使用 async/await 语法 ; 而 aiohttp 则是一个用于 asyncio 的异步请求及服务库
import aiohttp
import asyncio
async def fetch(url):
async with aiohttp.ClientSession() as session:
await session.get(url)
async def run_all():
await asyncio.gather(*[fetch(url) for url in tasks])
asyncio.run(run_all())