在我的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_ –