[#36686] 1.1 < 61.1 - 60.0 — Shin-ichiro HARA <sinara@...>

原です。

19 messages 2002/12/06

[#36770] www.ruby-lang.orgリニューアル準備のお知らせ — TADA Tadashi <sho@...>

ruby-lang.orgのwebmasterチームでは、タイムリーな情報提供と使いやすい

11 messages 2002/12/16

[ruby-list:36795] Re: Thread と Net::HTTP

From: Makoto Satoh <makotosato2@...>
Date: 2002-12-17 04:38:47 UTC
List: ruby-list #36795
From: Teruki Shigitani <shigitani@cybertech.co.jp>
Subject: [ruby-list:36794] Re: Thread と Net::HTTP
Date: Tue, 17 Dec 2002 13:22:09 +0900

> 鴫谷と申します。
> Makoto Satoh wrote:
> > irb で、以下のようにしたところ、#<Thread:-x2b060a8 dead> と表示されました。
> > 
> > irb(main):004:0> Thread.start {
> > irb(main):005:1* Net::HTTP.new("www.yahoo.co.jp").get("/index.html") do |str| puts str end
> > irb(main):006:1> }
> > #<Thread:0x2b060a8 dead>
> 
> スレッド内で起きた例外は、基本的には捕捉されずにそのままスレッドは
> 終了します。
> 上の例だと、
>   require 'net/http'
> が足りないので、内部で NameError があがっていると思われます。
> スレッド内で例外を捕捉してみると原因が分かると思います。

ありがとうございます。上の irb ではおっしゃる通り、net/http が足りないです。

スクリプトの中で使っていたほうは、スレッドを溜める配列を用意して、

threads = []
num_ary.each {|num|
  threads << Thread.start(num) {|pn|
    Net::HTTP.new(host).get("#{pn}.html") {|chunk|
      puts chunk
    }
  }
}

threads.each {|thread|
  thread.join
}

で動きました。

上で、require 'net/http' すると、irb は #<Thread:xxxxxx run> という文字列を
返してきます。run なので実行中だと思うのですが、結果が返らないのですね。
Thread.new を何らかの変数に代入すると、その文が入力し終わった瞬間に実行
されました。
私がスレッドについて良く分かっていないのですが、このような動作の仕組みについて
どこか詳しく説明されているところはないでしょうか?



--
Makoto SATOH  <makotosato2@yahoo.co.jp>
__________________________________________________
Do You Yahoo!?
Yahoo! BB is Broadband by Yahoo!  http://bb.yahoo.co.jp/


In This Thread