python直接从fd读入bytearray
是否有一种方法可以将文件描述符(而不是类似IO的对象)直接读取到文件中 现在,我使用一个临时python直接从fd读入bytearray,python,io,python-2.7,Python,Io,Python 2.7,是否有一种方法可以将文件描述符(而不是类似IO的对象)直接读取到文件中 现在,我使用一个临时FileIO对象进行调解,类似于: def fd_readinto(fd, ba): fio = io.FileIO(fd, closefd = False) return fio.readinto(ba) 没有函数可以做到这一点,而您的方法已经是最快的方法 我打算建议使用bytearray(mmap),array.fromfile,甚至使用bytearray和memoryview自制o
FileIO
对象进行调解,类似于:
def fd_readinto(fd, ba):
fio = io.FileIO(fd, closefd = False)
return fio.readinto(ba)
没有函数可以做到这一点,而您的方法已经是最快的方法 我打算建议使用
bytearray(mmap)
,array.fromfile
,甚至使用bytearray
和memoryview
自制os.read()
,但是FileIO.readinto
的速度非常快。(这是有道理的,因为它只执行一个系统调用。)
在我的系统(OS X 10.14.6、Python 2.7.10)上,FileIO
是最快的选项:
mmap 7.19839119911
array 5.72453403473
mv 0.49933886528
fio 0.299485206604
我不想这么说,但你的分析是有缺陷的。根据这些结果,fio比其他任何东西都快约100000倍(这导致我的左眉毛抬得很高)。我花了一些时间检查您的代码,发现了该漏洞。根据docs(),“…readinto(b)最多读取len(b)字节…”在您的示例中,您传递的是一个空bytearray(),因此它返回零字节。如果您将bytearray()预增长到适当的大小,您将得到更合理的结果。您是对的!我修改了代码和基准测试。但这仍然是最快的方法。
mmap 7.19839119911
array 5.72453403473
mv 0.49933886528
fio 0.299485206604