【发布时间】:2019-04-02 18:47:58
【问题描述】:
我正在通过以下代码将 >10MB 的文件从 App Engine 上传到 Google Cloud Storage。
gcs.bucket(bucket_name).blob(blob_name=file_path).upload_from_string(data, content_type=content_type)
我使用的是 GCS Python 客户端库,而不是内置的 App Engine 库,因为当该过程完成时,我会将多个 >10MB 的文件组合到 Cloud Storage 中的单个文件中。
代码在任务中运行,有 10 分钟时间获取数据并将信息以 CSV 格式上传到 GCS。在不到 3 分钟的时间内检索数据并将其转换为 CSV 格式的字符串。然后代码尝试将数据上传到 GCS,Stackdriver 日志记录停止接收日志,我等待大约 10 分钟,此时我在 Stackdriver 中收到大量日志,直至故障点:
DeadlineExceededError:超过响应 HTTP 请求的总期限。
这个问题令人沮丧,因为有两件事。
- 此错误是间歇性的。
-
一旦 1 个文件成功,它们都会在几秒钟内成功。
在最初的开发过程中,该问题从未发生过。直到最近这个问题才开始出现并且变得越来越频繁。
第一个 >10MB 文件总是需要几分钟才能成功或失败。 10 分钟后失败,但可能需要 1 到 9 分钟然后成功。文件成功后,所有大于 10MB 文件的未来上传都需要大约 5-10 秒。
我的理论是,App Engine 正在使用某些服务将文件上传到 Google Cloud Storage,该服务会在一段时间未使用后自动进入睡眠状态。当服务处于睡眠状态时,需要很长时间才能将其唤醒。服务唤醒后,它可以毫无问题地非常快速地上传到 GCS。
有没有其他人遇到过这个问题或对如何解决它有想法?
更新
完全错误:
(/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.
【问题讨论】:
标签: python-2.7 google-app-engine google-cloud-storage