`
jsntghf
  • 浏览: 2559979 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

ruby多线程下载

阅读更多

多线程批量下载http://blog.ntjy.net上的文章。此方法也可以用于批量下载图片......

 

  require "open-uri"

  def download
    if $*[0] == nil or $*[1] == nil or $*[2] == nil
      abort "用法示例:ruby #$0 开始数 结束数 存放的目录 EX:如ruby #$0 200 300 d:\\ "
    end
    time = Time.now
    threads = []
    for i in $*[0]..$*[1]
      exports = "http://blog.ntjy.net/my_blogs/" + i.to_s
      threads << Thread.new(i) do |thread|
        begin
          data = open(exports){|f|f.read}
          open("#{$*[2]}\\#{thread}.html","wb"){|f|f.write(data)}
          print thread, "-"
        rescue
        end
      end
    end
    threads.each {|thr| thr.join}
    puts " 下载完成,共耗时:#{Time.now - time}秒"
  end

 

输入如下命令即可:

 

ruby script/server 40000 40010 d:\

 

示例输出:

 

40004-40000-40009-40001-40003-40005-40006-40008-40010-40007-下载完成,共耗时:0.329秒 

 

分享到:
评论
2 楼 gigix 2009-12-14  
(40000..40010).each{|i| system "wget http://blog.ntjy.net/my_blogs/#{i} -O /my_blogs/#{i}.html"}

一分钟的事…
1 楼 juliancg65 2009-12-14  
 
  #####################################################
  # Download Picture Tool by jenas
  #
  #####################################################
  require "open-uri"
  
  i=0
  time = Time.now
  threads = []
  imgurls = []
  exports = "http://www.iteye.com" #任何URL地址
  filepath = "C:\\TMP\\" #保存本地图片地址
  data = open(exports){|f|f.read}
  data.scan(/<img src="(.*?)"/) { |x| imgurls << x if !imgurls.include?(x)  } #检查是否有重复内容
  
  for tmp in imgurls  
    i = i+1
    threads << Thread.new(i) do |thread|
      begin
        img = (open(tmp.to_s){|f| f.read }).to_s
        open(filepath+"#{thread}.jpg","wb"){|f|f.write(img)}
        print thread, "-completed"
      rescue
        puts "Error! with", thread
      end
    end
  end
  
  threads.each {|thr| thr.join}
  puts " 下载完成,共耗时:#{Time.now - time}秒"


补充下楼主对于批量下载图片的内容,呵呵。支持下楼主。有点粗糙,大家不要P我!

相关推荐

    Ruby多线程编程初步入门

    ### Ruby多线程编程初步入门 #### 一、引言 多线程编程是现代软件开发中的重要组成部分,尤其对于需要高效并发处理的任务而言更是如此。Ruby作为一种灵活且功能强大的编程语言,在支持多线程方面提供了丰富的工具...

    初步讲解Ruby编程中的多线程

    Ruby 中我们可以通过 Thread 类来创建多线程,Ruby的线程是一个轻量级的,可以以高效的方式来实现并行的代码。 创建 Ruby 线程 要启动一个新的线程,只需要调用 Thread.new 即可: # 线程 #1 代码部分 Thread.new {...

    多线程和并行程序设计

    多线程与并行程序设计是现代编程中的关键技术点,它们允许程序同时执行多个任务,提高程序的执行效率和响应速度。在Java中,这一技术通过内置的多线程支持得以实现,而线程作为执行任务的基本单位,是程序多任务运行...

    Working with Ruby Threads

    通过深入学习《Working with Ruby Threads》,开发者不仅能够掌握Ruby中的线程技术,还能学会如何在多线程环境中编写高效、可靠且易于维护的代码。无论是初学者还是有经验的开发者,都可以从中受益匪浅。

    Ruby 多线程的潜力和弱点分析

    Web 应用大多是 IO 密集型的,利用 Ruby 多进程+多线程模型将能大幅提升系统吞吐量。其原因在于:当Ruby 某个线程处于 IO Block 状态时,其它的线程还可以继续执行。但由于存在 Ruby GIL (Global Interpreter Lock)...

    ruby下载太慢保存下

    5. **使用带宽优化工具**:如`aria2`,这是一个支持多源、多线程下载的工具,可以提升大文件的下载速度。 描述中的“ruby下载太慢,上传一个”可能意味着提供者已经将Ruby的特定版本(如2.6.6)下载并打包,供他人...

    Ruby-rubyinstall安装RubyJRubyRubiniusMagLevorMRuby

    JRuby的最大优点是与Java库的无缝集成,以及在多线程环境下的高效执行。 3. Rubinius:Rubinius是一个用Ruby语言大部分实现的虚拟机,其目标是提供一个高性能的、符合Ruby语言规范的平台。它使用LLVM作为后端,支持...

    Ruby资源ruby-v3.1.1.zip

    4. **线程局部变量**:Ruby 3.1增加了对线程局部变量的支持,这些变量在每个线程中都有独立的副本,提高了多线程编程的安全性和效率。 5. **改进的错误消息**:错误消息现在更加详细,包含更多信息,帮助开发者更快...

    ruby on rails 常用插件下载

    在这个“ruby on rails 常用插件下载”中,提到的是一个与多线程相关的插件,可能用于提高应用程序的性能和并发处理能力。 在 Ruby on Rails 中,多线程是一种处理并发请求的方式,尤其在现代硬件支持多核处理器的...

    Ruby中使用多线程队列(Queue)实现下载博客文章保存到本地文件

    Ruby:多线程下载博客文章到本地的完整代码 代码如下: #encoding:utf-8 require ‘net/http’ require ‘thread’ require ‘open-uri’ require ‘nokogiri’ require ‘date’ $queue = Queue.new #文章列表页数 ...

    ruby-2.7.1.zip

    在Ruby的并发和异步编程方面,这个版本提供了更好的线程局部存储支持,允许开发者更安全地在多线程环境中存储局部数据。此外,`Mutex`和`ConditionVariable`等并发原语的性能也得到了增强。 Ruby 2.7.1在兼容性上也...

    ruby-2.5.8.tar.gz

    - **线程改进**:多线程性能得到了优化,减少了全局解释器锁(GIL)对并发的影响。 - **语法糖**:添加了`safe navigation operator` (`&.`),可以避免因对象可能为`nil`而导致的`NoMethodError`。 - **弃用和...

    Working with Ruby Threads(完整版)

    通过阅读"Working With Ruby Threads"这本书,你可以深入了解Ruby线程的内部工作原理,学习如何编写高效、安全的多线程Ruby程序。这本书不仅涵盖了理论知识,还提供了许多实用示例和最佳实践,对任何希望提升Ruby...

    RUBY 教程.doc

    4. **并发编程:** 支持多线程和协程,可以轻松实现复杂的并发逻辑。 #### 六、资源链接汇总 - **RUBY语言入门教程.pdf**:提供了RUBY基础知识的详细讲解。 - **http://download.csdn.net/detail/Sevk/659363**:...

    ruby中文文档

    5. **GIL(全局解释器锁)**:虽然Ruby的多线程模型受到全局解释器锁的限制,意味着在单个CPU核心上,同一时刻只能有一个线程执行Ruby代码,但仍然可以在IO密集型任务中利用多核资源。 6. **标准库和Gem**:Ruby的...

    ruby-enterprise-1.8.6-20090201

    3. **Thread Safety(线程安全)**:在Ruby 1.8.6 MRI中,线程并不完全安全,但在REE中,它提供了更好的线程支持,使得多线程编程成为可能,这对于服务器端应用尤其重要。 4. **Enterprise Features(企业级特性)*...

    Ruby和Rails高效的Kafka处理框架_Ruby_下载.zip

    4. **线程和进程安全**:Karafka支持多线程和多进程消费,能够充分利用服务器资源,提高处理能力。同时,它还确保了在并发环境下的数据一致性。 5. **插件和扩展**:开发者可以通过编写自定义中间件来扩展Karafka的...

Global site tag (gtag.js) - Google Analytics