gpt4 book ai didi

python - 在 Google App Engine (python) 中从 Google Cloud Storage 读取文件时发生内存泄漏

转载 作者:太空宇宙 更新时间:2023-11-04 01:04:09 24 4
gpt4 key购买 nike

以下是在 Google App Engine 上运行的部分 python 代码。它使用 cloudstorage 客户端从 Google Cloud Storage 获取文件。

问题是每次代码读取一个大文件(大约10M),实例中使用的内存会线性增加。很快,该进程由于“在为总共 40 个请求提供服务后超过 128 MB 和 134 MB 的软专用内存限制”而终止。

class ReadGSFile(webapp2.RequestHandler):
def get(self):
import cloudstorage as gcs

self.response.headers['Content-Type'] = "file type"
read_path = "path/to/file"

with gcs.open(read_path, 'r') as fp:
buf = fp.read(1000000)
while buf:
self.response.out.write(buf)
buf = fp.read(1000000)
fp.close()

如果我注释掉下面这行,那么实例中的内存使用确实会发生变化。所以应该是webapp2的问题。

  self.response.out.write(buf)

假设webapp2响应完成后会释放内存空间。但在我的代码中,它没有。

最佳答案

根据上述用户voscausa的评论建议,我更改了文件下载的方案,即使用Blobstore服务于文件下载。现在内存泄漏的问题已经解决了。

引用:https://cloud.google.com/appengine/docs/python/blobstore/#Python_Using_the_Blobstore_API_with_Google_Cloud_Storage

from google.appengine.ext import blobstore
from google.appengine.ext.webapp import blobstore_handlers

class GCSServingHandler(blobstore_handlers.BlobstoreDownloadHandler):
def get(self):
read_path = "/path/to/gcs file/" # The leading chars should not be "/gs/"
blob_key = blobstore.create_gs_key("/gs/" + read_path)

f_name = "file name"
f_type = "file type" # Such as 'text/plain'

self.response.headers['Content-Type'] = f_type
self.response.headers['Content-Disposition'] = "attachment; filename=\"%s\";"%f_name
self.response.headers['Content-Disposition'] += " filename*=utf-8''" + urllib2.quote(f_name.encode("utf8"))

self.send_blob(blob_key)

关于python - 在 Google App Engine (python) 中从 Google Cloud Storage 读取文件时发生内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31290860/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com