2015-10-05 3 views
2

Я просмотрел документы здесь: https://cloud.google.com/appengine/docs/python/urlfetch/ и здесь: https://cloud.google.com/appengine/articles/deadlineexceedederrors?hl=enApp Engine Python UrlFetch.set_default_fetch_deadline

Я также нашел этот вопрос переполнения стека, которая относится к моему вопросу: How to set timeout for urlfetch in Google App Engine?

Я нахожусь подключаясь из приложения моего приложения к внешнему веб-сервису, и у меня нет контроля над ним. Иногда запросы занимают более 60 секунд. Я установил приложение для использования очереди задач отложенного приложения api.

Я так смущен. В документах, которые я прочитал, кажется, что urlfetch имеет максимальный срок в 60 секунд. Но если его запуск в task_queue составляет 10 минут? Мне действительно нужен кто-то, чтобы прояснить это для меня.

Означает ли это, что задача состоит из 10 минут, но значение urlfetch внутри задачи по-прежнему ограничено 60 секундами?

псевдокод:

myTask = newTask() 
deffered.defer(myTask.long_process, _queue="myqueue") 

class newTask: 
    url = "https://example.com" 
def long_process(self): 
    #will setting the deadline to more than 60 seconds work or not? 
    urlfetch.set_default_fetch_deadline(120) 
    data = {} 
    resp = urlfetch.fetch(self.url, method="POST", payload=data) 
    #do something with resp.... 

ответ

3

Вы находитесь на правильном пути. Крошечная коррекция: для urlfetch.set_default_fetch_deadline() не существует max 60s max, это вы, возможно, были введены в заблуждение в контексте обсуждения.

Вы можете поднять значение 120 до 600 см замечания OP к выбранному ответу в этом недавней Q & A: Appengine task runs for 5 seconds before throwing DeadlineExceededError

0

Вы можете контролировать как UrlFetch и отложенный срок задания.

Оба могут работать до 600 секунд AFAIK.

Единственное, что вы не делаете, это установить крайний срок урфетки на более высокое значение, чем задание;)