异步文件处理模块。
asyncfile的Python项目详细描述
一个简单且最新的模块,支持与Python中的asyncio和fileIO操作兼容。在
目的
在Python中对文件进行操作是一项同步活动。在文件上正常操作时,不会出现这种情况 造成任何问题。但是,当文件在同时运行asyncio事件的代码中被篡改时 循环,这会导致asyncioevent loop阻塞。这会对程序的性能产生负面影响 因此应该避免。asyncfile模块通过在单独的 线程以使事件循环不会受到如此严重的影响。在
开放式示例
如果要使用常规的块代码,可以轻松地将其转换为asyncfile
阻塞:
^{pr2}$非阻塞:
importasyncfileimportasynciocustom_loop=asyncio.get_event_loop()# You can pass in your own loopasyncdefopen_file():asyncwithasyncfile.open('fake_file','r',loop=custom_loop)asf:print(awaitf.read())custom_loop.run_until_complete(open_file())
这两种方法都会产生相同的结果,但其中一种更适合于基于异步的代码。在
IO示例
阻塞:
importiowrap=io.FileIO('fake_file.txt','wb')buff=io.BufferedReader(wrap)buff.write(b'Random bytes')print(buff.fileno())print(buff.raw)print(buff.readable())buff.close()
非阻塞:
importasyncfileimportasyncioasyncdefno_block(file_path):wrap=asyncfile.AsyncFileIO(file_path,'rb')buff=asyncfile.AsyncBufferedReader(wrap)awaitbuff.read(-1)print(awaitbuff.fileno())print(buff.raw)print(awaitbuff.readable())awaitbuff.close()loop=asyncio.get_event_loop()loop.run_until_complete(no_block('fake_file.txt'))
阻塞:
importioforiinio.FileIO('fake_file.txt'):print(i)
非阻塞:
importasyncfileimportasyncioasyncdefasync_iteration():asyncforiinasyncfile.AsyncFileIO('fake_file.txt'):print(i)
- 项目
标签: