使用asyncio协程写入数据为什么不能挂起

使用asyncio协程写入数据为什么不能挂起

问题:今天练习中使用asyncio协程跟aiohttp进行多任务请求发现在写入文件的时候使用await挂起无效,

难道写入数据不是一个耗时的io操作吗?为什么不能使用await挂起呢!

解答:1.因为协程其实就是利用一个线程工作时相互切换实现的(形象来说就是疯狂压榨一个线程),它是一个线程工作的。

而写入数据是一个持续的过程,这个过程是要线程一直工作的!所以如果你在写入数据的时候挂起或者阻塞,那么这个线程

就不能进行写入操作。所以这就是为什么在写入文件的时候不能使用“await”挂起。

         2.为什么发送网络请求跟获取响应数据可以使用await挂起!因为发送网络请求跟获取响应数据,是一个等待服务端返回

数据的过程,返回数据是服务端来做的!这时候就可以挂起,然后让线程去做别的事情!

        3.协程就是在工作线程空余时间让它去做别的事情!一般我们在发送网络请求获取响应数据,这时候线程就会在哪里等待

服务端返回数据。而协程就是让线程在等待数据的时间去做别的事情。

猜你喜欢

转载自blog.csdn.net/qq_43082279/article/details/113123270