крайний срок = нет после использования urlfetch.set_default_fetch_deadline(n)

Я работаю над веб-приложением с Python и Google App Engine.

Я попытался установить крайний срок URLFetch по умолчанию во всем мире, как было предложено в предыдущем потоке:

https://stackoverflow.com/a/14698687/2653179

urlfetch.set_default_fetch_deadline(45)

Однако это не работает. Когда я печатаю его значение в одной из функций: urlfetch.get_default_fetch_deadline() равно None.

Вот main.py:

from google.appengine.api import users
import webapp2
import jinja2
import random
import string
import hashlib
import CQutils
import time
import os
import httpRequests
import logging
from google.appengine.api import urlfetch
urlfetch.set_default_fetch_deadline(45)

...

class Del(webapp2.RequestHandler):
    def get(self):
        id = self.request.get('id')
        ext = self.request.get('ext')
        user_id = httpRequests.advance(id,ext)
        d2 = urlfetch.get_default_fetch_deadline()
        logging.debug("value of deadline = %s", d2)

Печатает в консоли журнала:

DEBUG    2013-09-05 07:38:21,654 main.py:427] value of deadline = None

Функция, которая вызывается в httpRequests.py:

def advance(id, ext=None):

    url = "http://localhost:8080/api/" + id + "/advance"

    if ext is None:
        ext = ""

    params = urllib.urlencode({'ext': ext})
    result = urlfetch.fetch(url=url,
                            payload=params,
                            method=urlfetch.POST,
                            headers={'Content-Type': 'application/x-www-form-urlencoded'})

    if (result.status_code == 200):
        return result.content

person user2653179    schedule 04.09.2013    source источник
comment
только что попробовал - у меня работает. можете ли вы предоставить полный исходный код, включая импорт и т. д.   -  person Gwyn Howell    schedule 05.09.2013
comment
Добавил код, спасибо :)   -  person user2653179    schedule 05.09.2013


Ответы (1)


Я знаю, что это старый вопрос, но недавно столкнулся с проблемой.

Параметр помещается в локальный поток, что означает, что если ваше приложение настроено на потокобезопасность и вы обрабатываете запрос в потоке, отличном от того, для которого вы установили крайний срок по умолчанию, он может быть потерян. Для меня решение состояло в том, чтобы установить крайний срок перед каждым запросом в рамках цепочки промежуточного программного обеспечения.

Это не задокументировано и требует просмотра источника, чтобы понять это.

person Kevin Dolan    schedule 18.02.2014
comment
Это раздражает — знает ли Google об этом? Я установил urlfetch.set_default_fetch_deadline(45) в appengine_config.py, и, похоже, в некоторых случаях это не работает, как вы сказали, Кевин. - person Jabberwockey; 06.02.2015
comment
Я не думаю, что параметр, помещенный в локальный поток, может быть перезаписан другим потоком. См. этот ответ - person Slawek Rewaj; 09.03.2016