Python中aiofiles库的意义与使用场景是什么?
https://github.com/Tinche/aiofiles
今天蛋疼的看了一眼,发现它把文件操作扔到 asnycio 里面,但是文件的读写模式仍然是 block 的。搞不懂这么干到底有什么意义。我是 python 小白,还请指教一下。
Python中aiofiles库的意义与使用场景是什么?
不就是封装一个线程池吗?这个不会堵塞主线程,就是这样
,对 asyncio 不太了解,我猜测它是用了一个单独线程执行所有协程工作。这样有大量文件 IO 时应该并没有带来多大好处,不过是把阻塞放到另一个线程了。我觉得这个库应该使用 epoll 类的异步 API ,才能完全发挥 asyncio 的优势,但是看看代码好像并没有。
epoll 不支持本地 IO,非堵塞只是指不堵塞主线程,除非 Windows ,要不然你要完全用户态线程不堵塞是做不到的,那需要的是异步 IO 接口,内核不支持都没有用
POSIX 不是有 aio 么
用的是 coroutine 。但是不会阻塞啊。非阻塞的方法有很多, select poll aio 都行
epoll 在这里确实不适合,见笑了
coroutine 里面调用系统的阻塞 API ,还是要阻塞的吧。我觉得这个库应该用你说的这几个非阻塞 API ,但翻了半天代码它的确是用的最普通的阻塞方法。
你到 stackoverflow 搜搜文件异步 io 的实现方式,线程池是比较简单方便而且平台兼容性比较好的做法。
现在的 aio 都是线程实现的。。。
感觉没什么意义, 之前测试了一下, 读 100 个文件, aiofiles 比普通的方式还要更慢


