2016-10-26 30 views
3

最近我一直想使用Python异步/等待本地文件IO,但是我觉得这是不可能的阅读下列链接后:为什么Nodejs可以做文件I/O异步,而Python asyncio不能呢?

Does asyncio supports asynchronous I/O for file operations?

Read file line by line with asyncio

的解决方案是aiofiles模块,这是基于线程。但是,在Nodejs中,只需使用基于标准POSIX函数的fs模块就可以完成文件IO异步。为什么python在nodejs可以做I/O异步?

+2

节点不一定会比Python做“asyncio”。什么Nodejs做的是捆绑一个FS/IO API,默认情况下,它鼓励在IO调用上使用*异步模式*。 – user2864740

+1

'asyncio'不是用来做异步文件I/O的。还有其他一些库在python中执行它。例如,[aiofiles](https://github.com/Tinche/aiofiles),它使用fs API扩展了asyncio。 – tcooc

回答

-1

使用多线程是这样的:

import threading 
t = threading.Thread(target=method, name='LoopThread') 
t.start() 
t.join() 
3

但Node.js的异步文件I/O也是基于线程:

请注意,所有的文件系统API除了fs.FSWatcher()和那些 明确同步使用libuv的线程池,其中 可能有 令人惊讶和负面性能影响某些 应用程序,请参阅UV_THREADPOOL_SIZE文档以获取更多 信息。

- 从https://nodejs.org/api/fs.html#fs_threadpool_usage

所以Node.js的FS API是做同样的事情,Python的ASYNCIO + aiofiles模块。

相关问题