Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python直接从fd读入bytearray_Python_Io_Python 2.7 - Fatal编程技术网

python直接从fd读入bytearray

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

是否有一种方法可以将文件描述符(而不是类似IO的对象)直接读取到文件中

现在,我使用一个临时
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