Как уменьшить / изменить задержку после сканирования?

1

Кто-нибудь сталкивается с использованием Crawler4j?

Я выполнил пример с страницы проекта, чтобы реализовать свой собственный искатель. Гусеница работает отлично и очень быстро проползает. Единственное, что у меня всегда есть задержка 20-30 секунд. Есть ли способ избежать времени ожидания?

Теги:
web-crawler
crawler4j

1 ответ

2

Просто проверил исходный код crawler4j. Метод CrawerController.start имеет много фиксированных 10 секунд "пауз", чтобы убедиться, что потоки выполнены и готовы к очистке.

// Make sure again that none of the threads
// are
// alive.
logger.info("It looks like no thread is working, waiting for 10 seconds to make sure...");
sleep(10);

// ... more code ...

logger.info("No thread is working and no more URLs are in queue waiting for another 10 seconds to make sure...");
sleep(10);

// ... more code ...

logger.info("Waiting for 10 seconds before final clean up...");
sleep(10);

Кроме того, основной цикл проверяет каждые 10 секунд, чтобы узнать, выполнены ли потоки обхода:

while (true) {
    sleep(10);
    // code to check if some thread is still working
}

protected void sleep(int seconds) {
   try {
       Thread.sleep(seconds * 1000);
   } catch (Exception ignored) {
   }
}

Поэтому может быть целесообразно точно настроить эти вызовы и сократить время сна.

Лучшее решение, если вы можете сэкономить некоторое время, - это переписать этот метод. Я бы заменил List<Thread> threads на ExecutorService, его метод ожидания будет особенно удобен. В отличие от Sleep, awaitTermination(10, TimeUnit.SECONDS) немедленно вернется, если все задачи будут выполнены.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню