2014-03-12 3 views
1

Crawler4j를 사용한 경험이 있습니까?크롤링 후 지연을 줄이거 나 변경하려면 어떻게해야합니까?

나는 the project page의 예를 따라 내 자신의 크롤러를 실현했습니다. 크롤러는 정상적으로 작동하며 매우 빠르게 크롤링합니다. 유일한 것은 내가 항상 20-30 초의 지연을 갖는다는 것입니다. 대기 시간을 피할 수있는 방법이 있습니까?

+0

처리 또는 대기 시간을 의미합니까? 내가 알고있는 유일한 대기 설정은 "[예의] (https://code.google.com/p/crawler4j/wiki/Configurations#Politeness)"입니다. –

답변

2

방금 ​​확인한 crawler4j source code. CrawerController.start 메서드에는 스레드가 완료되고 정리할 준비가되었는지 확인하기 위해 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) { 
    } 
} 

는 그래서 그 전화 미세 조정에 가치가있을 수 있으며, 수면 시간을 줄일 :

// 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 초 크롤링 스레드가 완료 알고 있습니다.

더 나은 해결책은 시간을 허비 할 수 있다면이 방법을 다시 작성하는 것입니다. 나는 List<Thread> threadsExecutorService으로 바꿀 것이고, 그 awaitTermination 방법은 특히 편리 할 것입니다. 절전과 달리 awaitTermination(10, TimeUnit.SECONDS)은 모든 작업이 완료되면 즉시 반환됩니다.

관련 문제