异步编程可以在多线程的基础上更近一步。
而 python 中的异步编程和 js 的异步编程几乎一摸一样。
参考资料
- Python 异步编程入门
- 手把手教你如何使用Python的异步IO框架:asyncio(中)
- python的asyncio模組(一):異步執行的好處
- python3 使用 asyncio 代替线程
- 如何让你写的爬虫速度像坐火箭一样快【并发请求】
- Python异步编程 asyncio小白速通
为什么需要异步编程
考虑这样一种情况,假设你写爬虫,即便是写多线程或者多进程,如果你发出一个请求后,即便是线程的话,也需要等待返回才继续执行,也就是在等待返回的过程中,该线程是堵塞的。
那么,如果,不想让该线程堵塞,在线程等待返回的时候,转而让资源去处理其他事情,等返回回来之后,继续处理。
所以,这个时候就要用异步编程了。
所有的原始代码都能改成异步操作吗
比如,我使用 requests
库,我能把它改成异步操作吗?
答案是:使用 requests
确实可以改成 async/await 执行方式,但是,却不是异步操作,因为 requests 内部是阻塞的。就好像你可以用金漆染东西,但是,你不能说染过的就是纯金。
所以说,异步操作最好使用异步库莱操作。
- aiohttp(异步网络请求库)
- aiohttp-requests(让aiohttp用起来更方便的库)
- aiofiles(异步文件操作库)
- pillow(其实就是PIL库,代码中的图片操作有用到)