多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## 1、同步和异步的区别 - **同步**: 所有的操作都做完,才返回给用户。这样用户在线等待的时间太长,给用户一种卡死了的感觉 - **异步**: 不等所有操作做完 ,就返回给用户。操作已经启动程序会将它加到消息队列当中,慢慢执行,不会给用户卡死的感觉 ## 2、使用Asynico 进行异步编程 - Asynico - 异步 I/O - asyncio 是用来编写 **并发** 代码的库,使用 **async/await** 语法。 - asyncio 被用作多个提供高性能 Python 异步框架的基础,包括网络和网站服务,数据库连接库,分布式任务队列等等。 - asyncio 往往是构建 IO 密集型和高层级 **结构化** 网络代码的最佳选择。 > python 3.5 后才可以使用async/await 语法 ### 异步请求图片示例: 安装异步http 请求库 ```sh $ pip install aiohttp ``` - 导入 asyncio 以及异步请求aiohttp ```python # !/usr/bin/env python import asyncio import aiohttp ``` - fetch ```python async def fetch(session, url): async with session.get(url, headers={ "referer": "https://www.mzitu.com/", "user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36" }) as response: return await response.read() ``` - download_image() ```python async def download_image(url): async with aiohttp.ClientSession() as session: result = await fetch(session, url) with open(url.split("/")[-1], 'wb') as f: f.write(result) f.close() ``` - __main()__ ```python if __name__ == '__main__': # 添加多个任务 tasks = [ asyncio.ensure_future(download_image("https://csdnimg.cn/cdn/content-toolbar/csdn-logo.png?v=20200416.1")), asyncio.ensure_future(download_image("https://csdnimg.cn/public/common/toolbar/images/csdnqr@2x.png")) ] # 打开时间循环 loop = asyncio.get_event_loop() loop.run_until_complete(asyncio.gather(*tasks)) ``` ## 参考 [https://docs.python.org/zh-cn/3/library/asyncio.html](https://docs.python.org/zh-cn/3/library/asyncio.html) [https://docs.aiohttp.org/en/stable/](https://docs.aiohttp.org/en/stable/)