From: Richard Conroy Date: 2006-12-07T23:48:19+09:00 Subject: Odd result when attempting to use Mechanize in parallel with Threads I wrote a simple tool to iterate a network to try and find web servers running on specific ports. We have a lot of devices & software with a web UI, and I thought that this would be a handy way to find them, and even tell what they are. I thought this would be a handy coding project too, and a good way to cut my teeth on Ruby threads, and build up some usage with Mechanize. BTW I am running this on *Windows XP*. However my code is quite obviously executing this serially. Is there something obviously wrong with my code below? (results after code snippet). I am aware this could make my machine choke from thread overkill, but I wanted to get it working in parallel first. Perhaps Mechanize instances have some shared elements? ============================ require 'mechanize' threads = Array.new puts "sweep of 153.200.72.* segment http ports" (1..254).each do |ran| threads << Thread.new(ran) { |r| agent = WWW::Mechanize.new agent.user_agent_alias = 'Windows Mozilla' ports = [80,8080] ports.each do |p| begin page = agent.get("http://153.200.72."+r.to_s+":"+p.to_s) puts "153.200.72."+r.to_s+":"+p.to_s+" - "+page.title rescue puts "153.200.72."+r.to_s+":"+p.to_s+" - NOTHING" end end } threads.each { |aThread| aThread.join } end ============================ 153.200.72.10:80 - NOTHING 153.200.72.10:8080 - NOTHING 153.200.72.11:80 - NOTHING 153.200.72.11:8080 - NOTHING 153.200.72.12:80 - NOTHING 153.200.72.12:8080 - NOTHING 153.200.72.13:80 - NOTHING 153.200.72.13:8080 - NOTHING 153.200.72.14:80 - NOTHING 153.200.72.14:8080 - NOTHING 153.200.72.15:80 - NOTHING 153.200.72.15:8080 - NOTHING 153.200.72.16:80 - NOTHING 153.200.72.16:8080 - NOTHING 153.200.72.17:80 - NOTHING 153.200.72.17:8080 - NOTHING