5

Google App EngineでUrlfetchのラッパーとして利用できることは承知してurllib2います。ご存知のように、UniversalFeedparserはurllib2を使用します。

urllib2にタイムアウトを設定する方法を知っていますか?
urllib2のtimeoutパラメータはGoogleAppEngineバージョンに移植されていますか?

私は次のような方法には興味がありません:

rssurldata = urlfetch(rssurl, deadline=..)
feedparser.parse(rssurldata)
4

4 に答える 4

3

私の知る限り、ラッパーはタイムアウト値を渡す方法を提供しないため、これを行う簡単な方法はありません。ハックなオプションの1つは、urlfetchAPIにモンキーパッチを適用することです。

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
于 2010-07-27T12:54:38.170 に答える
1

私はこれが好きです。GAEAPIの更新ではより動的です。

# -*- 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
    )
于 2012-05-26T09:30:28.670 に答える
0

推奨される方法であるデフォルトの期限を設定できます。

from google.appengine.api import urlfetch
import urllib, urllib2


class MyClass():

    def __init__(self):
        urlfetch.set_default_fetch_deadline(10)

CookieJar を有効にするために urllib2 を使用するオープナーがありますが、簡単なリクエストを行うことができます

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

期限を0.1

于 2015-03-23T11:08:42.610 に答える
-3

ソケットタイムアウト値を設定してみましたか?ここから撮影:

Python 2.3以降、タイムアウトする前にソケットが応答を待機する時間を指定できます。これは、Webページをフェッチする必要があるアプリケーションで役立ちます。デフォルトでは、ソケットモジュールにはタイムアウトがなく、ハングする可能性があります。現在、ソケットタイムアウトは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)

GAEがこの値を読み取るかどうかはわかりませんが、一見の価値があります。

編集:

urllib2タイムアウトパラメータを渡す機能があります。

オプションのtimeoutパラメーターは、接続試行などのブロック操作のタイムアウトを秒単位で指定します(指定されていない場合は、グローバルなデフォルトのタイムアウト設定が使用されます)。これは実際には、HTTP、HTTPS、FTP、およびFTPSのconnections.connectionsでのみ機能します。

于 2010-07-26T20:50:03.183 に答える