代码之家  ›  专栏  ›  技术社区  ›  systempuntoout

如何在googleappengine上使用urllib2声明超时?

  •  5
  • systempuntoout  · 技术社区  · 14 年前

    urllib2 可以在googleappengine上作为Urlfetch的包装器使用,而且正如您所知,universalfeedparser使用urllib2。


    timeout urllib2上的参数是否已移植到Google App Engine版本?

    rssurldata = urlfetch(rssurl, deadline=..)
    feedparser.parse(rssurldata)
    
    4 回复  |  直到 13 年前
        1
  •  3
  •   Nick Johnson    14 年前

    old_fetch = urlfetch.fetch
    def new_fetch(url, payload=None, method=GET, headers={},
              allow_truncated=False, follow_redirects=True,
              deadline=10.0, *args, **kwargs):
      return old_fetch(url, payload, method, headers, allow_truncated,
                       follow_redirects, deadline, *args, **kwargs)
    urlfetch.fetch = new_fetch
    
        2
  •  1
  •   tvavrys    12 年前

    # -*- coding: utf-8 -*-
    from google.appengine.api import urlfetch
    
    import settings
    
    
    def fetch(*args, **kwargs):
        """
        Base fetch func with default deadline settings
        """
        fetch_kwargs = {
            'deadline': settings.URL_FETCH_DEADLINE
        }
        fetch_kwargs.update(kwargs)
        return urlfetch.fetch(
            *args, **fetch_kwargs
        )
    
        3
  •  0
  •   Tjorriemorrie    10 年前

    您可以通过以下方式设置默认截止日期:

    from google.appengine.api import urlfetch
    import urllib, urllib2
    
    
    class MyClass():
    
        def __init__(self):
            urlfetch.set_default_fetch_deadline(10)
    

    我有一个使用urllib2启用CookieJar的开场白,但是您可以只执行简单的请求

    response = self.opener.open(self.url_login, data_encoded)
    

    0.1

        4
  •  -3
  •   advait    14 年前

    here :

    从Python2.3开始,您可以指定套接字在超时之前等待响应的时间。这在必须获取网页的应用程序中非常有用。默认情况下,套接字模块没有超时,可以挂起。目前,在httplib或urllib2级别上没有公开套接字超时。但是,可以使用以下方法全局设置所有套接字的默认超时:

    import socket
    import urllib2
    
    # timeout in seconds
    timeout = 10
    socket.setdefaulttimeout(timeout)
    
    # this call to urllib2.urlopen now uses the default timeout
    # we have set in the socket module
    req = urllib2.Request('http://www.voidspace.org.uk')
    response = urllib2.urlopen(req)
    

    编辑:

    urllib2 能够传递超时参数:

    可选超时参数 指定的超时(以秒为单位) 阻塞操作,如 连接尝试(如果未指定, 将被使用)。这实际上只是 连接。连接。