Da die Twisted getPage
Funktion mir keinen Zugriff auf die Header gibt, musste ich meine eigene getPageWithHeaders
Funktion schreiben.Twisted manchmal wirft (scheinbar unvollständig) 'maximale Rekursion Tiefe überschritten' RuntimeError
def getPageWithHeaders(contextFactory=None, *args, **kwargs):
try:
return _makeGetterFactory(url, HTTPClientFactory,
contextFactory=contextFactory,
*args, **kwargs)
except:
traceback.print_exc()
Das ist genau die gleiche wie die normale getPage
Funktion, mit der Ausnahme, dass ich den Try/außer Block hinzugefügt und senden Sie das Factory-Objekt anstatt das Aus irgendeinem Grund factory.deferred
Rückkehr, bekomme ich manchmal eine maximale Rekursionstiefe hat hier den Fehler überschritten. Es passiert konsistent einige Male von 700, in der Regel an verschiedenen Standorten jedes Mal. Kann irgendjemand etwas dazu sagen? Mir ist nicht klar, warum oder wie das passieren könnte, und die Twisted-Codebasis ist groß genug, dass ich nicht einmal weiß, wo ich suchen soll.
EDIT: Hier ist die Zurückverfolgungs ich, die bizarr unvollständig scheint:
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
Dies ist der gesamte Rückverfolgungs, die eindeutig nicht lang genug ist, um unsere max Rekursionstiefe überschritten. Gibt es noch etwas, was ich tun muss, um den vollen Stapel zu bekommen? Ich hatte dieses Problem noch nie zuvor. normalerweise auf, wenn ich etwas tun, wie
def f(): return f()
try: f()
except: traceback.print_exc()
dann bekomme ich die Art von „maximale Rekursionstiefe überschritt“ Stack, den man erwarten würde, mit einer Tonne von Verweisen auf f()
Nur zur Info: dass "_" vor _makeGetterFactory bedeutet "nenne das nicht". Es ist ein privates Implementierungsdetail. Es wird ohne Warnung unterbrochen, wenn Sie eine neue Version von Twisted installieren. – Glyph