截止日=使用urlfetch.set_default_fetch_deadline(n)后没有

时间:2013-09-04 21:17:17

标签: python google-app-engine urlfetch

我正在使用Python和Google App Engine开发Web应用程序。

我尝试按照上一个帖子中的建议全局设置默认的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

1 个答案:

答案 0 :(得分:4)

我知道这是一个老问题,但最近遇到了这个问题。

该设置被置于线程本地,这意味着如果您的应用程序设置为线程安全并且您在与您设置默认截止时间的线程不同的线程中处理请求,则可能会丢失该设置。对我来说,解决方案是在每个请求之前设置截止日期作为中间件链的一部分。

这没有记录,需要查看来源以找出它。