Кто-нибудь сталкивается с использованием Crawler4j?
Я выполнил пример с страницы проекта, чтобы реализовать свой собственный искатель. Гусеница работает отлично и очень быстро проползает. Единственное, что у меня всегда есть задержка 20-30 секунд. Есть ли способ избежать времени ожидания?
Просто проверил исходный код 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)
немедленно вернется, если все задачи будут выполнены.