From: Daniel Berger Date: 2008-07-11T11:39:44+09:00 Subject: Re: threadify-0.0.1 On Jul 1, 2:04 pm, ara howard wrote: > this one's for you charlie ;-) > > NAME >    threadify.rb > > SYNOPSIS >    enumerable = %w( a b c d ) >    enumerable.threadify(2){ 'process this block using two worker   > threads' } > > DESCRIPTION >    threadify.rb makes it stupid easy to process a bunch of data using   > 'n' >    worker threads > > INSTALL >    gem installthreadify > > URI >    http://rubyforge.org/projects/codeforpeople > > SAMPLES > >    <========< sample/a.rb >========> > >    ~ > cat sample/a.rb > >      require 'open-uri' >      require 'yaml' > >      require 'rubygems' >      require 'threadify' > >      uris = >        %w( >          http://google.com >          http://yahoo.com >          http://rubyforge.org >          http://ruby-lang.org >          http://kcrw.org >          http://drawohara.com >          http://codeforpeople.com >        ) > >      time 'withoutthreadify' do >        uris.each do |uri| >          body = open(uri){|pipe| pipe.read} >        end >      end > >      time 'withthreadify' do >        uris.threadifydo |uri| >          body = open(uri){|pipe| pipe.read} >        end >      end > >      BEGIN { >        def time label >          a = Time.now.to_f >          yield >        ensure >          b = Time.now.to_f >          y label => (b - a) >        end >      } > >    ~ > ruby sample/a.rb > >      --- >      withoutthreadify: 7.41900205612183 >      --- >      withthreadify: 3.69886112213135 Pretty cool. I tried it with file-find. Here was the code: require 'file/find' require 'threadify' rule = File::Find.new( :pattern => "*.rb", :path => "C:\\ruby" ) start = Time.now rule.find.threadify(10){ |f| p f } p start p Time.now Without threadify, it took 1:40 on my laptop. With threadify(10) it dropped to 44 seconds. I think I'll add a "threads" option directly, and borrow some of your code. :) Thanks, Dan