Поскольку функция Twisted getPage
не дает мне доступа к заголовкам, мне пришлось написать собственную функцию getPageWithHeaders
.
def getPageWithHeaders(contextFactory=None, *args, **kwargs):
try:
return _makeGetterFactory(url, HTTPClientFactory,
contextFactory=contextFactory,
*args, **kwargs)
except:
traceback.print_exc()
Это в точности то же самое, что и обычная функция getPage
, за исключением того, что я добавил блок try / Кроме того, чтобы вернуть фабричный объект, а не фабричный.
По какой-то причине я иногда получаю ошибку превышения максимальной глубины рекурсии здесь. Это происходит последовательно несколько раз из 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()