Я пытался отследить странные проблемы с моим веб-приложением mod_wsgi / Python. У меня есть обработчик приложения, который создает объект и вызывает метод:
def my_method(self, file):
self.sapi.write("In my method for %d time"%self.mmcount)
self.mmcount += 1
# ... open file (absolute path to file), extract list of files inside
# ... exit if file contains no path/file strings
for f in extracted_files:
self.num_files_found += 1
self.my_method(f)
В начале и конце этого я пишу
obj.num_files_found
в браузер.
Так что это рекурсивная функция, которая спускается по дереву ссылок на файлы внутри файлов. Любые ссылки в файле печатаются, затем эти ссылки открываются и проверяются, и так далее, пока все файлы не станут конечными узлами, не содержащими файлов. Почему я это делаю не очень важно ... это скорее педантичный пример.
Можно ожидать, что результат будет детерминированным
Например
Files found: 0
In my method for the 0 time
In my method for the 1 time
In my method for the 2 time
In my method for the 3 time
...
In my method for the n time
Files found: 128
И для первых нескольких запросов это как ожидалось. Затем я получаю следующее, пока обновляю
Files found: 0
In my method for the 0 time
Files found: 128
Несмотря на то, что я знаю, из предыдущих обновлений и без изменений кода / файла, для перечисления 128 файлов требуется n раз.
Итак, вопрос: Включает ли mod_wsgi / Python внутреннюю оптимизацию, которая остановит полное выполнение? Предполагается ли вывод является детерминированным и кэш-память?
Как примечание, при обновлениях, когда они ожидаются, REMOTE_PORT увеличивается на единицу каждый раз ... когда он использует короткий вывод, приращение REMOTE_PORT резко скачет. Может быть не связано, однако.
Я новичок в Python, будь нежнее
решаемые
Кто знает, что это было, но удаление Apache, mod_python, mod_wsgi и почти всего, что связано с HTTP, и переустановка устранили проблему. Что-то было довольно сломано , но теперь кажется нормально:)