GAE和google.appengine.runtime.DeadlineExceededError

时间:2011-07-25 20:33:39

标签: google-app-engine

在我的GAE代码中,我将几个文件上传到第三方(不是我的)服务器:

for argument in files_arguments:
    files_counter +=1
    file_size = len(self.request.get(argument))/(1024.0*1024.0)
    if file_size <= 1:
        files.append(MultipartParam('file1', self.request.get(argument), 'file'+str(files_counter)+'.jpg', 'application/x-www-form-urlencoded'))
        # sending file
        data, headers = multipart_encode(files)
        # try 3 times to send the file
        for i in range(3):
            try:
                result = urlfetch.fetch(url=self.request.get('upload_url'), 
                                        payload=''.join(data),
                                        method=urlfetch.POST,
                                        headers=headers,
                                        deadline=10
                                        )              
                break
            except DownloadError:
                logging.error('(POST) ... DownloadError during file upload, attempt ' + str(i))
                pass
            except DeadlineExceededError:
                logging.error('(POST) ... DeadlineExceededError during file upload, attempt ' + str(i))
                pass
        if result.status_code == 200:

并且在〜第10个文件中我得到了DeadlineExceededError。 我该怎么做才能避免这种情况?

1 个答案:

答案 0 :(得分:3)

  • 如果你还没有这样做过;重新计算代码,以便将执行推迟到task任务的截止日期为10分钟,而正常请求的截止日期为
  • 进一步分解您的问题,以便每个文件上传都在它自己的任务中。 这还有一个额外的好处,就是让“重试”代码在任务失败时可以automatically retry为冗余。
  • 如果每次上传的时间超过10分钟,那么您必须使用Backends来处理长时间运行的流程。