
Python 的 asyncio 库是用于编写单线程并发代码的库,使用 async/await 语法。它支持异步I/O、事件循环、协程和任务。asyncio 使得可以在单线程内高效执行并发操作,特别适用于I/O密集型和高级别的结构化网络代码。它简化了异步编程模型,提高了程序性能和响应速度,是实现异步编程的关键工具。
python3.4就有asyncio,python3.5用async,await关键字
import timeimport asyncio# 定义异步函数async def hello():await asyncio.sleep(1)print(time.time())def run():for i in range(5):loop.run_until_complete(hello())loop = asyncio.get_event_loop()if __name__ =='__main__':run()
1527595104.83385011527595104.83385011527595104.83385011527595104.83385011527595104.8338501
async def 用来定义异步函数,其内部有异步操作。
每个线程有一个事件循环,主线程调用asyncio.get_event_loop()时会创建事件循环
你需要把异步的任务丢给这个循环的run_until_complete()方法,事件循环会安排协同程序的执行。
import timeimport asyncioimport aiohttp # 用异步方式获取网页内容urls = ['https://www.baidu.com'] * 400async def get_html(url, sem):async with(sem):async with aiohttp.ClientSession() as session:async with session.get(url) as resp:html = await resp.text()def main():loop = asyncio.get_event_loop() # 获取事件循环sem = asyncio.Semaphore(10) # 控制并发的数量tasks = [get_html(url, sem) for url in urls] # 把所有任务放到一个列表中loop.run_until_complete(asyncio.wait(tasks)) # 激活协程loop.close() # 关闭事件循环if __name__ == '__main__':start = time.time()main()print(time.time()-start) # 5.03s
html = await xxx
html可以获得参数