분산 된 웹 크롤러를 만들고 각 단일 컴퓨터의 리소스를 최대한 활용하려고합니다. Iterator를 통해 EventMachine에서 구문 분석 함수를 실행하고 em-http-request를 사용하여 비동기 HTTP 요청을 만듭니다. 현재로서는 100 회 반복 실행이 있는데이 레벨을 넘을 수없는 것 같습니다. 반복 횟수를 늘리면 크롤링 속도에 영향을주지 않습니다. 그러나, 나는 단지 10-15 %의 CPU 부하와 20-30 %의 네트워크 부하를 가지므로 더 빠른 속도로 크롤링 할 수있는 충분한 공간이 있습니다.EventMachine : EM에서 처리 할 수있는 최대 병렬 HTTP 요청은 무엇입니까?
저는 Ruby 1.9.2를 사용하고 있습니다. 리소스를 효율적으로 사용하도록 코드를 향상시킬 방법이 있습니까? 아니면 잘못하고 있습니다.
def start_job_crawl
@redis.lpop @queue do |link|
if link.nil?
EventMachine::add_timer(1){ start_job_crawl() }
else
#parsing link, using asynchronous http request,
#doing something with the content
parse(link)
end
end
end
#main reactor loop
EM.run {
EM.kqueue
@redis = EM::Protocols::Redis.connect(:host => "127.0.0.1")
@redis.errback do |code|
puts "Redis error: #{code}"
end
#100 parallel 'threads'. Want to increase this
EM::Iterator.new(0..99, 100).each do |num, iter|
start_job_crawl()
end
}