Я загружаю файл размером более 10 МБ из App Engine в Google Cloud Storage с помощью приведенного ниже кода.
gcs.bucket(bucket_name).blob(blob_name=file_path).upload_from_string(data, content_type=content_type)
Я использую клиентскую библиотеку Python GCS, а не встроенную библиотеку App Engine, потому что я собираю несколько файлов размером более 10 МБ в один файл в облачном хранилище после завершения процесса.
Код выполняется в задаче и имеет 10 минут для получения данных и загрузки информации в формате CSV в GCS. Данные извлекаются и преобразуются в строку в формате CSV менее чем за 3 минуты. Затем код пытается загрузить данные в GCS, ведение журнала Stackdriver прекращает прием журналов, и я жду ~ 10 минут, после чего я получаю поток журналов в Stackdriver вплоть до точки сбоя со сбоем:
DeadlineExceededError: Общий срок ответа на HTTP-запрос превышен.
Эта проблема расстраивает из-за 2 вещей.
- Эта ошибка периодически.
Как только 1 файл успешен, все они преуспевают в секундах.
Во время начальной разработки проблема никогда не возникала. Только недавно проблема начала появляться и становится все более частой.
Файл first > 10MB всегда занимает несколько минут, чтобы завершиться неудачно или успешно. Сбой через 10 минут, но может занять от 1 до 9 минут и затем завершиться успешно. После успешного завершения файла все последующие загрузки файлов размером> 10 МБ займут ~ 5-10 секунд .
Моя теория состоит в том, что существует некоторый сервис, который App Engine использует для загрузки файлов в Google Cloud Storage, который автоматически переходит в спящий режим после определенного времени простоя. Когда служба спит, требуется очень много времени, чтобы разбудить ее. Когда служба активна, она может быстро и без проблем загружать ее в GCS.
Кто-нибудь еще сталкивался с этим или есть идеи, как его решить?
UPDATE
Полная ошибка:
(/base/alloc/tmpfs/dynamic_runtimes/python27g/3b44e98ed7fbb86b/python27/python27_lib/versions/1/google/appengine/runtime/wsgi.py:279)
Traceback (most recent call last):
File "/base/alloc/tmpfs/dynamic_runtimes/python27g/3b44e98ed7fbb86b/python27/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 267, in Handle
result = handler(dict(self._environ), self._StartResponse)
File "/base/data/home/apps/s~pg-gx-n-app-200716/worker:20181030t154529.413639922318911836/lib/flask/app.py", line 2309, in __call__
return self.wsgi_app(environ, start_response)
File "/base/data/home/apps/s~pg-gx-n-app-200716/worker:20181030t154529.413639922318911836/lib/flask/app.py", line 2292, in wsgi_app
response = self.full_dispatch_request()
File "/base/data/home/apps/s~pg-gx-n-app-200716/worker:20181030t154529.413639922318911836/lib/flask/app.py", line 1813, in full_dispatch_request
rv = self.dispatch_request()
File "/base/data/home/apps/s~pg-gx-n-app-200716/worker:20181030t154529.413639922318911836/lib/flask/app.py", line 1799, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/base/data/home/apps/s~pg-gx-n-app-200716/worker:20181030t154529.413639922318911836/worker.py", line 277, in cache_records
cache_module.save_records(records=records, report_fields=report.report_fields, report_id=report.report_id, header=header_flag)
File "/base/data/home/apps/s~pg-gx-n-app-200716/worker:20181030t154529.413639922318911836/storage/user/user.py", line 110, in save_records
user_entry = User.__generate_user_csv(user=user, report_fields=report_fields)
File "/base/data/home/apps/s~pg-gx-n-app-200716/worker:20181030t154529.413639922318911836/storage/user/user.py", line 55, in __generate_user_csv
for index, attrib in enumerate(report_fields):
DeadlineExceededError: The overall deadline for responding to the HTTP request was exceeded.