2013-02-26 45 views
0

我在GAE上使用python 2.7,並且我需要讀取25到35 MB大小的文件。我他們上傳到Blob存儲區,和我使用下面的代碼來讀取文件:如何更有效地使用blobstore.BlobReader

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

我的問題是,我該如何使用BlobReader性能BUFFER_SIZE和位置,以這種更高效地完成。文檔不是很詳細,我沒有很多關於文件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) 

但目前還不清楚如何使用這使讀取文件速度更快。

謝謝,

回答

1

讀取線,這將是更有效的,當較大的緩衝區大小將導致更少的Blobstore操作。只需將緩衝區大小設置得儘可能大,然後進行排序即可。

+0

所以我試圖讀取的文件大小約爲25 MB,但緩衝區只有1 MB。這是否會讓一些數據未讀?我懷疑b'cos似乎並不是所有來自文件的數據都被讀取,即使任務位於後端,因此不會超時。 – Kwame 2013-02-28 23:29:25

+0

讓我重新解釋一下這個問題。 BloRreader包含或表示一個包含大約80,000行文本的文件,但我只需要閱讀其中的大約100行。有沒有一種有效的方式來掃描或搜索BlobReader,也許有一些正則表達式,然後只讀取那些包含文本匹配的行? – Kwame 2013-03-01 02:56:25

+0

@Kwame緩衝區只是保存從blobstore讀取但尚未返回到應用程序代碼的數據,因此它不必爲讀取的每一行(或字符!)進行RPC調用。它可以是任何大小,你仍然可以閱讀整個文件。 – 2013-03-02 12:17:49