Тайм-аут рабочего оружия Google App Engine в приложении Flask при загрузке большого маринада? - PullRequest
0 голосов
/ 20 октября 2019

У меня есть файл-файл Sklearn 350 МБ, который я хочу загрузить при запуске приложения Flask.

Я использую _pickle, поскольку в документации указано, что он быстрее загружается:

import _pickle as pickle

start = timeit.default_timer()
with open("pickle/pipeline.pkl", 'rb') as f: 
        # ~350MB file
        pipeline = pickle.load(f)
        stop = timeit.default_timer()
        print('Time: ', stop - start)

Пикл загружается через 5-12 секунд локально, но на экземпляре Google App Engine F4 (1 ГБ ОЗУ) рабочий gunicorn истекает.

Журнал Google App Engine:

A 2019-10-20T20:07:55Z [2019-10-20 20:07:55 +0000] [14] [INFO] Booting worker with pid: 14

A 2019-10-20T20:11:02Z [2019-10-20 20:04:14 +0000] [1] [CRITICAL] WORKER TIMEOUT (pid:14)

Я попытался увеличить время ожидания работника, добавив флаг -t в файл app.yaml, как показано ниже, и все еще не работает:

runtime: python
instance_class: F4
env: flex
entrypoint: gunicorn -t 120 -b :$PORT app:app

liveness_check:
  initial_delay_sec: 500

readiness_check:
  app_start_timeout_sec: 500

Я даже попытался использовать eventlet, и он не работал:

gunicorn -t 120 -b :$PORT app:app --worker-class eventlet --workers 3 

1 Ответ

2 голосов
/ 21 октября 2019

Процесс загрузки файла данных 350 МБ занимает слишком много времени, и App Engine считает, что ваш экземпляр вышел из строя. Время запуска вашего контейнера превышает три минуты.

У вас есть проблема, которую нелегко решить. Максимальный размер файла составляет 32 МБ (64 МБ для приложений Go). Вы загружаете файл в память, но вашему экземпляру требуется слишком много времени для его загрузки.

Решение: я бы использовал другой сервис, такой как Cloud Run, где вы можете встроить свой файл данных маринования в изображение контейнера, чтобычто загрузки не требуются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...