Я бы хотел провести интеллектуальный анализ данных в большом масштабе. Для этого мне нужен быстрый краулер. Все, что мне нужно, это загрузить веб-страницу, извлечь ссылки и рекурсивно переходить по ним, но без двойного посещения одного и того же URL-адреса. В принципе, я хочу избежать зацикливания.
Я уже написал краулер на питоне, но он слишком медленный. Я не могу насытить им 100-мегабитную линию. Максимальная скорость ~ 40 urls / sec. и почему-то трудно добиться лучших результатов. Похоже, проблема с многопоточностью / сокетами python. У меня также возникли проблемы с сборщиком мусора Python, но это было решаемо. Между прочим, центральный процессор не является узким местом.
Итак, что мне следует использовать, чтобы написать поискового робота, который работает как можно быстрее, и как лучше всего избежать зацикливания при сканировании?
РЕДАКТИРОВАТЬ:
Решением было объединить многопроцессорность
и потоки
модулей. Для наилучшего эффекта создайте несколько процессов с несколькими потоками для каждого процесса. Создание нескольких потоков в одном процессе неэффективно, и несколько процессов с одним потоком потребляют слишком много памяти.