【问题标题】:how to use blobstore.BlobReader more efficiently如何更有效地使用 blobstore.BlobReader
【发布时间】:2013-02-12 11:48:10
【问题描述】:

我在 GAE 上使用 python 2.7,我需要读取 25 到 35 MB 大小的文件。我已将它们上传到 Blobstore,并使用以下代码读取文件:

blob_reader = blobstore.BlobReader(blob_key)
for line in blob_reader:
     # ...

我的问题是,如何使用 BlobReader 属性 buffer_size 和 position 来更有效地执行此操作。文档不是很详细,而且我对文件 I/O 没有太多经验。给出的例子是:

# Instantiate a BlobReader for a given Blobstore value, setting the
# buffer size to 1 MB.
blob_reader = blobstore.BlobReader(blob_key, buffer_size=1048576)

# Instantiate a BlobReader for a given Blobstore value, setting the
 # initial read position.
 blob_reader = blobstore.BlobReader(blob_key, position=4194304)

但目前尚不清楚如何使用它来更快地读取文件。

谢谢,

【问题讨论】:

    标签: python google-app-engine file-io python-2.7 blobstore


    【解决方案1】:

    更大的缓冲区大小将导致读取行时的 blobstore 操作更少,这将更有效。只需将缓冲区大小设置为尽可能大,即可进行排序。

    【讨论】:

    • 所以我试图读取的文件大小约为 25 MB,但缓冲区只有 1 MB。这会留下一些未读的数据吗?我很奇怪,因为即使任务在后端并且不会超时,似乎也没有读取文件中的所有数据。
    • 让我重新表述这个问题。 BloRreader 包含或表示一个包含大约 80,000 行文本的文件,但我只需要阅读其中的大约 100 行。有没有一种有效的方法来扫描或搜索 BlobReader,也许使用一些正则表达式,然后只读取那些包含匹配文本的行?
    • @Kwame 缓冲区仅用于保存从 blobstore 读取但尚未返回到您的应用程序代码的数据,因此它不必为每一行(或字符! ) 你读。它可以是任意大小,您仍然可以读取整个文件。
    • 除了自己做之外,没有办法对 blobstore 中的文本进行正则表达式匹配。
    猜你喜欢
    • 1970-01-01
    • 2019-07-04
    • 2013-07-15
    • 2021-08-24
    • 1970-01-01
    • 1970-01-01
    • 2017-04-22
    • 2012-11-09
    • 1970-01-01
    相关资源
    最近更新 更多