我目前正在使用C / Python API从大型二进制文件中读取数据。 Python中的这个结果不如纯C结果(时间x2)那么有效,因为我认为将时间包装到PyObject中所花费的时间。通常,我在PyArrayObject中存储42个元素的元组。为此,我使用:
PyObject *r = Py_BuildValue("(f, I, i, K, f, K, K, etc..)", a, b, c, etc...) ;
我的问题如下:是否有更有效的方法(更快的执行时间)?
例如:PyTuple_Pack(n,args)会更快地完成吗?
答案 0 :(得分:0)
对于时间关键代码,我创建了一个所需长度的元组,然后单独创建组件并将它们填充到元组中。
答案 1 :(得分:0)
看起来您正在编写自己的自定义struct.unpack
...您是否尝试使用纯Python(非常快速的工作)编写二进制文件阅读器以用作“稻草人”?
import struct
fmt = "f I i Q f Q Q etc.." # check endianness and alignment
structobj = struct.Struct(fmt)
recsz = structobj.size
assert recsz == EXPECTED_RECSZ
unpack = structobj.unpack
f = open('bigfile.bin', 'rb')
while True:
record = f.read(recsz)
if not record: break
a_tuple = unpack(record)
do_something(a_tuple)
f.close()
旁白:(1)文件有32位浮点数和64位整数? (2)第一个arg中带有parens的Py_BuildValue返回一个元组;你提到的这个“PyArrayObject”是什么?