GAE и google.appengine.runtime.DeadlineExceededError - PullRequest
0 голосов
/ 26 июля 2011

В своем коде 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 Ответ

3 голосов
/ 26 июля 2011
  • Если вы еще этого не сделали; перефакторинг вашего кода, чтобы вы могли отложить выполнение до задачи . Срок выполнения задач - 10 минут против 30 секунд обычного запроса .
  • Далее разбейте вашу проблему так, чтобы каждая загрузка файла выполнялась самостоятельно. Это также имеет дополнительное преимущество, заключающееся в том, что ваш код повторных попыток становится избыточным, поскольку задачи могут автоматически повторять в случае неудачи.
  • Если каждая загрузка занимает больше 10 минут, вам придется использовать Backends для обработки длительных процессов.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...