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