使用 Expat 控制一次 read() 的字节数
我正在使用 Python 的 Expat 解析一些 XML(通过调用 parser = xml.parsers.expat.ParserCreate()
然后为我的方法设置相关回调)。
看起来,当 Expat 调用 read(nbytes) 返回新数据时,nbytes 始终为 2,048。我有相当多的 XML 需要处理,并且怀疑这些小的 read() 使得整个过程相当缓慢。作为参考,我在运行 Windows 7 的 Intel Xeon X5550(2.67 GHz)上看到吞吐量约为 9 MB/s。
我尝试设置 parser.buffer_text = True
和 parser .buffer_size = 65536
,但 Expat 仍在调用 read()
方法,参数仅为 2,048。
这个可以增加吗?
I'm parsing some XML using Python's Expat (by calling parser = xml.parsers.expat.ParserCreate()
and then setting the relevant callbacks to my methods).
It seems that when Expat calls read(nbytes)
to return new data, nbytes
is always 2,048. I have quite a lot of XML to process, and suspect that these small read()s are making the overall process rather slow. As a point of reference, I'm seeing throughput around 9 MB/s on an Intel Xeon X5550, 2.67 GHz running Windows 7.
I've tried setting parser.buffer_text = True
and parser.buffer_size = 65536
, but Expat is still calling the read()
method with an argument of just 2,048.
Is it possible to increase this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您正在谈论 xmlparse.ParseFile 方法,对吧?
不幸的是,不,该值在 pyexpat.c 中被硬编码为 BUF_SIZE = 2048。
You're talking about the xmlparse.ParseFile method, right?
Unfortunately, no, that value is hardcoded as BUF_SIZE = 2048 in pyexpat.c.