我们在 Google App 引擎标准环境中,F2 实例(第 1 代 - python 2.7)。我们有一个遵循此流程的报告模块。
Worker Task 在队列中启动。
task = taskqueue.add(
url='/backendreport',
target='worker',
queue_name = 'generate-reports',
params={
"task_data" : task_data
})
在 worker 类中,我们查询 Google 数据存储并将数据写入 Google Sheet。我们对记录进行分页以查找其他报告元素。当我们找到额外的页面时,我们再次调用相同的任务以产生另一个写入,因此它可以获取下一组报告元素并将它们写入 Google 表格。
在 backendreport.py 我们有以下代码。
class BackendReport():
# Query google datastore to find the records(paginated)
result = self.service.spreadsheets().values().update(
spreadsheetId=spreadsheet_Id,
range=range_name,
valueInputOption=value_input_option,
body=resource_body).execute()
# If pagination finds additional records
task = taskqueue.add(
url='/backendreport',
target='worker',
queue_name = 'generate-reports',
params={
"task_data" : task_data
})
我们将相同的 BackendReport(带有分页)作为前端作业(而不是任务)运行。分页工作没有任何错误 - 这意味着我们获取记录的每一页并显示到前端。但是当我们迭代地执行任务时,它会因软内存限制问题而失败。我们的印象是,每次调用任务(对于每个分页)它都应该独立运行,并且不应该有任何内存限制。我们在这里做错了什么?
为什么在达到软内存限制时 GCP 不旋转不同的实例 - 自动(我们的实例类是 F2)。错误消息说在服务3 个请求后达到了 512 MB 的软内存限制- 这是否意味着 backendreport 模块启动了 3 个请求 - 是否意味着有 3 个任务调用 (/backendreport)?