使用blobstore文件API,我可以编写非常大的blobfile:
现在有了GAE GCS客户端,我无法追加和完成。如何在不编写的情况下将非常大的文件写入GCS。撰写不是GCS客户端的一部分。文件API仍然可以正常工作,但是已经被弃用了。在
下面是使用任务链的blobstore解决方案:
class BlobData(webapp2.RequestHandler):
def post(self):
page = int(self.request.get('page', default_value='0'))
data = Data.get_data(.....)
blob_file = self.request.get('blobfile', default_value='none')
if blob_file == 'none':
file_name = files.blobstore.create(mime_type='text/...',
_blobinfo_uploaded_filename='data....txt')
else:
data.with_cursor(self.request.get('cursor'))
count = 0 # page lines counter
with files.open(blob_file, 'a') as f:
for each in data.fetch(page):
f.write(each)
count += 1
if count >= page:
cursor = data.cursor()
taskqueue.add(url='/blobdata', queue_name='blobdata', countdown=10, method='POST',
params={'page': page, 'cursor': cursor, 'blobfile': blob_file},
headers={'X-AppEngine-FailFast': 'True'})
else: # no data left
files.finalize(blob_file)
在Java客户机中,我们可以序列化读取通道(相当于Python客户机中的缓冲区),并将其传递给另一个任务,以继续在同一个文件中进行写入。有关详细信息,请参见the Java doc:
我不知道Python GCS客户机返回的缓冲区是否可以序列化,我在doc中没有找到任何信息,但它可能值得检查。在
如果这不可能,那就用构图。不要担心GCS客户端中不提供组合,您可以始终使用appengine中的标准云存储API库。API文档在Python中有一个
compose
示例here。看起来像这样:相关问题 更多 >
编程相关推荐