TwistedgetPage
関数ではヘッダーにアクセスできないため、独自のgetPageWithHeaders
関数を作成する必要がありました。
def getPageWithHeaders(contextFactory=None, *args, **kwargs):
try:
return _makeGetterFactory(url, HTTPClientFactory,
contextFactory=contextFactory,
*args, **kwargs)
except:
traceback.print_exc()
これは通常の関数とまったく同じですがgetPage
、try/except ブロックを追加し、factory.deferred を返す代わりにファクトリ オブジェクトを返します。
何らかの理由で、ここで最大再帰深度を超えたエラーが発生することがあります。700 回のうち数回は一貫して発生し、通常は毎回異なるサイトで発生します。誰でもこれに光を当てることができますか?なぜ、どのようにこれが起こっているのかはわかりません。また、Twisted のコードベースは非常に大きく、どこを見ればよいかさえわかりません。
編集:ここに私が得たトレースバックがありますが、これは奇妙に不完全なようです:
Traceback (most recent call last):
File "C:\keep-alive\utility\background.py", line 70, in getPageWithHeaders
factory = _makeGetterFactory(url, HTTPClientFactory, timeout=60 , contextFactory=context, *args, **kwargs)
File "c:\Python26\lib\site-packages\twisted\web\client.py", line 449, in _makeGetterFactory
factory = factoryFactory(url, *args, **kwargs)
File "c:\Python26\lib\site-packages\twisted\web\client.py", line 248, in __init__
self.headers = InsensitiveDict(headers)
RuntimeError: maximum recursion depth exceeded
これはトレースバック全体であり、再帰の最大深度を超えるほど長くはありません。完全なスタックを取得するために他に何かする必要がありますか? 私はこれまでこの問題を経験したことがありません。通常、私が何かをするとき
def f(): return f()
try: f()
except: traceback.print_exc()
次に、あなたが期待するような「最大再帰深度を超えた」スタックを取得し、大量の参照を取得しますf()