Мы в стандартной среде движка Google App, экземпляр F2 (поколение 1 - python 2.7). У нас есть модуль отчетности, который следует этому потоку.
Рабочая задача инициируется в очереди.
task = taskqueue.add(
url='/backendreport',
target='worker',
queue_name = 'generate-reports',
params={
"task_data" : task_data
})
В рабочем классе мы запрашиваем хранилище данных 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 МБ - означает ли это, что модуль backendreport ускорил 3 запроса - означает ли это, что было 3 вызова задач ( / backendreport)