На работе мне посчастливилось исправить плохо написанный скрипт проверки подлинности url в python, выполненный кем-то другим. Это действительно грязный код, и, пытаясь исправить одну из ошибок, я нашел какое-то поведение, которое я не понимаю.python 2.7 IOError: [Errno 24] Слишком много открытых файлов:
Сценарий должен обрабатывать файл с объемом около 10 тысяч URL-адресов в нем, он должен проверять каждый URL-адрес, чтобы убедиться, что он действителен не только в его структуре, но и проверяет, существует ли он (с помощью pycurl для этого). На одной части кода, это делается:
for li in lineas:
liNew = "http://" + li
parsedUrl = urlparse.urlparse(liNew)
В этом случае ошибка была добавление «HTTP: //» в начале строки, как делалось прежде, чем по сценарию. Поэтому я изменил код для этого:
for li in lineas:
liNew = li
parsedUrl = urlparse.urlparse(liNew)
Теперь, с той же входной файл сценария завершается с ошибкой:
IOError: [Errno 24] Too many open files:/path/to/file/being/written/to.txt
С liNew = "HTTP: //" + Li, файловые дескрипторы не переходят по умолчанию по умолчанию 1024, но изменение этой строки на liNew = li заставит их пережить 8000, почему?
Да, это имеет смысл. Я переписываю все это, это такой беспорядок, что мне легче начать с нуля. – Juancho