在我的GAE应用中,我向Google Spreadsheet添加了行。
taskqueue.add(url='/tabletask?u=%s' % (user_id),
retry_options=taskqueue.TaskRetryOptions(task_retry_limit=0),
method='GET')
class TableTaskHandler(webapp2.RequestHandler):
def get(self):
user_id = self.request.get('u')
if user_id:
try:
tables.add_row(
user_id
)
except Exception, error_message:
pass
def get_google_api_service(scope='https://www.googleapis.com/auth/spreadsheets', api='sheets', version='v4'):
''' Login to Google API with service account and get the service
'''
service = None
try:
credentials = AppAssertionCredentials(scope=scope)
http = credentials.authorize(httplib2.Http(memcache))
service = build(api, version, http=http)
except Exception, error_message:
logging.exception('Failed to get Google API service, exception happened - %s' % error_message)
return service
def add_row(user_id, user_name, project_id, question, answer, ss_id=SPREADSHEET_ID):
service = get_google_api_service()
if service:
values = [
[
user_id, user_name, project_id, question, answer # 'test1', 'test2'
],
# Additional rows ...
]
body = {
'values': values
}
# https://developers.google.com/sheets/api/guides/values#appending_values
response = service.spreadsheets().values().append(
spreadsheetId=ss_id,
range='A1:E1000',
valueInputOption='RAW',
body=body).execute()
我添加了许多具有不同行值的任务。
结果我得到了严重的错误'超过128 Mb的软私人限制,158 Mb'总共服务5个请求后。
这里可能有什么问题?
答案 0 :(得分:1)
乍一看,您的代码中没有任何特殊内容可能会导致内存泄漏。 除非他非常熟悉所使用的第三方库及其现有错误,否则我认为没有人可以找到它。所以我会按如下方式解决问题:
首先让我们找出完全内存泄漏的位置以及它是否在泄漏。
请参阅tracemalloc,memory_profiler,heapy或您熟悉的任何其他内容。此处列出了大多数可用的配置文件Which Python memory profiler is recommended?
预期结果:您清楚地知道 内存正在泄漏,直到代码行/ python表达式
如果问题出现在第三方代码中,请尝试深入了解其代码并弄清楚其中的内容
取决于第2页结果
一个。发布另一个SO问题,例如'为什么这个python代码摘录导致内存泄漏' - 理想情况下它应该是一个独立的代码片段,导致一个奇怪的行为,没有任何第三方库,可以在本地重现。环境规范 - 至少是python版本,表示赞赏
湾如果问题出在第三方库中,并且您找到了问题,请在github /目标项目托管的任何地方打开错误报告
℃。如果问题显然出现在第三方库中并且您无法找到原因,请打开一张描述该案例的故障单并附上分析器报告
答案 1 :(得分:0)
似乎您正在运行实例类B1或F1,其内存限制为128 MB。
可能的解决方案是使用更高的instance class。但请记住,选择不同的实例类会对您的定价和配额产生影响。