App Engine:API调用file.Create()花了太长时间才响应并被取消

时间:2012-02-08 10:33:23

标签: python google-app-engine blobstore

当我尝试使用文档(下面)中提供的相同示例写入blobstore时,它每次都在dev服务器上运行,但在appspot上100%失败并出现此错误:The API call file.Create() took too long to respond and was cancelled. Google搜索显示这是一个罕见的问题,尽管有些人报道过。知道这里发生了什么吗?

我在开发服务器上使用Python 2.6,这也许就是为什么我在开发期间没有看到这个。

from __future__ import with_statement
from google.appengine.api import files

# Create the file
file_name = files.blobstore.create(mime_type='application/octet-stream')

# Open the file and write to it
with files.open(file_name, 'a') as f:
  f.write('data')

# Finalize the file. Do this before attempting to read it.
files.finalize(file_name)

# Get the file's blob key
blob_key = files.blobstore.get_blob_key(file_name)

回溯:

The API call file.Create() took too long to respond and was cancelled.
Traceback (most recent call last):
  File "/base/data/home/apps/s~czongae/1.356669185377832769/webapp2.py", line 1516, in __call__
    rv = self.handle_exception(request, response, e)
  File "/base/data/home/apps/s~czongae/1.356669185377832769/webapp2.py", line 1510, in __call__
    rv = self.router.dispatch(request, response)
  File "/base/data/home/apps/s~czongae/1.356669185377832769/webapp2.py", line 1258, in default_dispatcher
    return route.handler_adapter(request, response)
  File "/base/data/home/apps/s~czongae/1.356669185377832769/webapp2.py", line 1082, in __call__
    return handler.dispatch()
  File "/base/data/home/apps/s~czongae/1.356669185377832769/webapp2.py", line 552, in dispatch
    return self.handle_exception(e, self.app.debug)
  File "/base/data/home/apps/s~czongae/1.356669185377832769/webapp2.py", line 550, in dispatch
    return method(*args, **kwargs)
  File "/base/data/home/apps/s~czongae/1.356669185377832769/main.py", line 43, in get
    file_name = files.blobstore.create(mime_type='text/html')
  File "/base/python_runtime/python_lib/versions/1/google/appengine/api/files/blobstore.py", line 69, in create
    return files._create(_BLOBSTORE_FILESYSTEM, params=params)
  File "/base/python_runtime/python_lib/versions/1/google/appengine/api/files/file.py", line 491, in _create
    _make_call('Create', request, response)
  File "/base/python_runtime/python_lib/versions/1/google/appengine/api/files/file.py", line 234, in _make_call
    rpc.check_success()
  File "/base/python_runtime/python_lib/versions/1/google/appengine/api/apiproxy_stub_map.py", line 558, in check_success
    self.__rpc.CheckSuccess()
  File "/base/python_runtime/python_lib/versions/1/google/appengine/api/apiproxy_rpc.py", line 133, in CheckSuccess
    raise self.exception
DeadlineExceededError: The API call file.Create() took too long to respond and was cancelled.
Saved; key: __appstats__:082400, part: 41 bytes, full: 5691 bytes, overhead: 0.000 + 0.004; link: http://czongae.appspot.com/_ah/stats/details?time=1328696282404
<class 'google.appengine.runtime.apiproxy_errors.DeadlineExceededError'>: The API call file.Create() took too long to respond and was cancelled.
Traceback (most recent call last):
  File "/base/data/home/apps/s~czongae/1.356669185377832769/main.py", line 72, in <module>
    main()
  File "/base/data/home/apps/s~czongae/1.356669185377832769/main.py", line 69, in main
    app.run()
  File "/base/data/home/apps/s~czongae/1.356669185377832769/webapp2.py", line 1595, in run
    _webapp_util.run_wsgi_app(self)
  File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/util.py", line 98, in run_wsgi_app
    run_bare_wsgi_app(add_wsgi_middleware(application))
  File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/util.py", line 118, in run_bare_wsgi_app
    for data in result:
  File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/appstats/recording.py", line 924, in appstats_wsgi_wrapper
    result = app(environ, appstats_start_response)
  File "/base/data/home/apps/s~czongae/1.356669185377832769/webapp2.py", line 1524, in __call__
    response = self._internal_error(e)
  File "/base/data/home/apps/s~czongae/1.356669185377832769/webapp2.py", line 1516, in __call__
    rv = self.handle_exception(request, response, e)
  File "/base/data/home/apps/s~czongae/1.356669185377832769/webapp2.py", line 1510, in __call__
    rv = self.router.dispatch(request, response)
  File "/base/data/home/apps/s~czongae/1.356669185377832769/webapp2.py", line 1258, in default_dispatcher
    return route.handler_adapter(request, response)
  File "/base/data/home/apps/s~czongae/1.356669185377832769/webapp2.py", line 1082, in __call__
    return handler.dispatch()
  File "/base/data/home/apps/s~czongae/1.356669185377832769/webapp2.py", line 552, in dispatch
    return self.handle_exception(e, self.app.debug)
  File "/base/data/home/apps/s~czongae/1.356669185377832769/webapp2.py", line 550, in dispatch
    return method(*args, **kwargs)
  File "/base/data/home/apps/s~czongae/1.356669185377832769/main.py", line 43, in get
    file_name = files.blobstore.create(mime_type='text/html')
  File "/base/python_runtime/python_lib/versions/1/google/appengine/api/files/blobstore.py", line 69, in create
    return files._create(_BLOBSTORE_FILESYSTEM, params=params)
  File "/base/python_runtime/python_lib/versions/1/google/appengine/api/files/file.py", line 491, in _create
    _make_call('Create', request, response)
  File "/base/python_runtime/python_lib/versions/1/google/appengine/api/files/file.py", line 234, in _make_call
    rpc.check_success()
  File "/base/python_runtime/python_lib/versions/1/google/appengine/api/apiproxy_stub_map.py", line 558, in check_success
    self.__rpc.CheckSuccess()
  File "/base/python_runtime/python_lib/versions/1/google/appengine/api/apiproxy_rpc.py", line 133, in CheckSuccess
    raise self.exception

1 个答案:

答案 0 :(得分:1)

官方手册中没有记录。但是在打开文件时尝试添加exclusive_lock=True。在我的blobstore从M / S迁移到HRD期间,我认为我遇到了这个问题。

http://code.google.com/p/googleappengine/source/browse/trunk/python/google/appengine/api/files/file.py#402

# Open the file and write to it
with files.open(file_name, 'a', exclusive_lock=True) as f:
  f.write('data')