在我的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()
我用不同的行值添加了很多任务。
因此,在总共处理了5个请求之后,我得到了严重错误'超过128 Mb的软专用限制(158 Mb)'。
这里有什么问题?
这里有几篇关于任务队列引起的内存问题的文章。这是相当复杂的,所以我建议查看这些帖子,然后根据需要更新您的问题。这里有一个例子:https://stackoverflow.com/questions/33036334/memory-leak-in-google-ndb-library –
@ JeffO'Neill,这个问题是关于NDB而不是任务队列。而且,我只在遇到内存泄漏时才执行任务队列(在任务队列使用之前)。 –
我遇到了一个与service.spreadsheets()。values()类似的内存泄漏,如果范围大于100,则获取或追加。你有没有设法解决这个问题? @LA_ –