因为 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()