[#24065] Perl/Ruby Conference in Kyoto — Noritsugu Nakamura <nnakamur@...>
[#24073] Ruby で使える XML パーザーについて — Takaharu Yamashita <takayan@...2.so-net.ne.jp>
はじめまして。
[#24088] mod_ruby-0.1.8 and postgres-0.6.1 — Teruki Shigitani <shigi@...>
鴫谷と申します. はじめまして.
[#24095] p <obj> の返値 — ARIMA Yasuhiro <fit0298@...>
有馬です。
[#24102] Perl/Ruby Conference 開催決定 ! — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
[#24109] gtk+ なクラスブラウザ — kadu <kadu3@...16.alpha-net.ne.jp>
みなさんはじめまして、kaduというものです。
[#24112] ある method がどこで def されたか調べる方法 — Yasushi Shoji <yashi@...>
やすしです。
[#24126] embedded Ruby for Verilog — "Kikutani, Makoto" <kikutani@...>
VerilogにRubyを組み込もうと思ってはじめたのですが、最初からつまづきました。
[#24134] File.rename error message — Kazuhiro Yoshida <moriq.kazuhiro@...>
もりきゅうです。
In message <200008081252.AA00846@VZF07161.nifty.ne.jp>
もりきゅうです。
In message <200008081648.AA00863@VZF07161.nifty.ne.jp>
In article <200008082329.e78NTWZ20292@edge.sky.yamashina.kyoto.jp>,
In message <hvo66pbgvfa.fsf@serein.m17n.org>
[#24158] Hash の初期値に [] を使う — Mitsuhiro Kondo <kondo@...>
rubyを使っていて不思議に思ったことがあります。
[#24176] FreeBSD ports — "Akinori -Aki- MUSHA" <knu@...>
こんにちは、 knu です。
ごとけんです
こんばんは。御指摘ありがとうございます。
In message <86og2yofwu.wl@localhost.local.idaemons.org>
最近ports関連はすっかりさぼっている福間@福岡 です。
こんにちは。
In message <86vgx5fv7j.wl@daemon.local.idaemons.org>
福間@福岡 です。
ごとけんです
福間@福岡 です。
[#24191] drb.rb: 0x40155740 is recycled object (IndexError) — Hideto ISHIBASHI <hideto-i@...4u.or.jp>
おひさしぶりです。石橋秀仁です。
石橋秀仁です。咳さん、お返事ありがとうございます。
石橋秀仁です。咳さん、お返事ありがとうございます。
石橋さん、今日は、上手(かみて@XP-ML)です。
おや、上手さん。こちらでは始めまして。(Subject変えました)
[#24210] install guide — gotoken@... (GOTO Kentaro)
ごとけんです
From: gotoken@math.sci.hokudai.ac.jp (GOTO Kentaro)
[#24222] FreeBSD ports #3 — "Akinori -Aki- MUSHA" <knu@...>
今日は以下の FreeBSD ports を追加しました。
[#24226] Ruby で日本語とスペイン語の混在文は? — Kakuzi TAKAHASI <ktaka@...>
はじめまして。
まつもと ゆきひろです
[#24250] コマンドの STDERR への出力を補足したい。 — Kengo Nakajima <ringo@...>
こんにちは
[#24257] デバッグ用にデータをダンプしたい — Mitsuhiro Kondo <kondo@...>
rubyでプログラムを作っていてデータをダンプしたくなったので、
[#24267] What's the biggest Ruby development? — Dave Thomas <Dave@...>
[#24274] About sub with multilines — kiri@...
はじめまして 桐山@鳥羽商船高等専門学校 と申します。
[#24280] RE: [ruby-list:24268] cygwinでconfigure不能:cygwin1.dllの問題 — "Mitsuo Igarashi" <mitsu5@...>
mitsu5 です。
[#24284] 拡張ライブラリ作成時の NULL ポインター — Akimichi Tatsukawa <akimichi@...>
こんばんは、立川と申します。
[#24294] grep(!/hoge/)? — kiri@...
桐山です。
[#24298] Re: cygwin で configure 不能 :cygwin1.dll の問題 — "Mitsuo Igarashi" <mitsu5@...>
mitsu5 です
[#24323] HP-UX 上での ruby1.4.6 make getaddrinfo.c err — yasuaki onishi <yasuaki@...4u.or.jp>
初めての投稿する大西と申します。
[#24324] ruby の発展の為に — "Mitsuo Igarashi" <mitsu5@...>
Windows に ruby をインストールしようとして、皆様に助けられ
思いっ切りUNIXな者からの、おそらく偏ってるであろう意見です。
桐山です。
ごとけんです
From: gotoken@math.sci.hokudai.ac.jp (GOTO Kentaro)
ごとけんです
新井です。
Koji Arai <JCA02266@nifty.ne.jp> wrote:
From: Koji Arai <JCA02266@nifty.ne.jp>
From: rubikitch <rubikitch@ruby-lang.org>
新井です。
From: Koji Arai <JCA02266@nifty.ne.jp>
新井です。
From: Koji Arai <JCA02266@nifty.ne.jp>
新井です。
From: Koji Arai <JCA02266@nifty.ne.jp>
師星です。
From: MOROHOSHI Akihiko <moro@remus.dti.ne.jp>
師星です。
From: MOROHOSHI Akihiko <moro@remus.dti.ne.jp>
新井です。
新井です。
ふなばです (RD の話題についていけてない)。
新井です。
ふなばです。
新井です。
ふなばです。
新井です。
ふなばです。
Toshです。
ふなばです。
Toshです。
From: Koji Arai <JCA02266@nifty.ne.jp>
ふなばです。
[#24329] Coerce between Range and Boolean — NISHIKAWA <nyasu@...3web.ne.jp>
こんばんは。にゃす@3web です。
ごとけんです
[#24341] install guide draft — gotoken@... (GOTO Kentaro)
ごとけんです
桐山です。
ごとけんです
At Tue, 22 Aug 2000 17:23:47 +0900,
T.Shimomura です。
rpm系はrpmの入手先や存在するrpmが違うだけでインストール方法などは
ごとけんです
At Wed, 23 Aug 2000 23:50:01 +0900,
なかだです。
"Nobuyoshi.Nakada" <nobu.nakada@nifty.ne.jp> wrote:
高橋征義です。
ごとけんです
高橋征義です。
ごとけんです
In message "[ruby-list:24448] Re: did commit install guide"
助田です。
ごとけんです
なかだです。
こんばんは、伊達と申します。
ごとけんです
渡辺哲也です。
ごとけんです
渡辺哲也です。
[#24447] (RDP) tempfile.rd — Toshiro Kuwabara <toshirok@...3.so-net.ne.jp>
Toshです。
[#24469] レンタルサーバで eruby — Tokita Kousui <ktokita@...>
前にレンタルサーバでerubyを動かせないと騒いでた時田です(^^;
たけうちかほりです。
前田です。
前田です。
[#24473] RD for(?) Cygwin — polygon <kiyose@...>
ポリゴンです。
[#24499] FreeBSD port: x11-toolkits/rubytk — Yasuhiro Fukuma <yasuf@...>
福間@福岡 です。
[#24522] (RDP) readline — Koji Arai <JCA02266@...>
新井です。
[#24531] RD 質問 — Koji Arai <JCA02266@...>
新井です。
新井です。
Koji Arai <JCA02266@nifty.ne.jp> wrote:
[#24550] Array への nil の代入について — Kenya Ogata <k_ogata@...>
おがたといいます。
おがたです
Kenya Ogata <k_ogata@mbd.nifty.com> wrote:
# reject されて悔しいからもう一回書く :-)
[#24592] perl to ruby — "Yasuyuki Imai" <waver@...3.ttcn.ne.jp>
[#24631] Re: RubyDocumentationProject( 仮 ) — TAKAHASHI Masayoshi <maki@...>
高橋征義です。
From: TAKAHASHI Masayoshi <maki@inac.co.jp>
[#24648] RDP のフォーマット案 — Koji Arai <JCA02266@...>
新井です。
まつもと ゆきひろです
[#24673] regex search on the charaters with MSBs on — Jun Adachi <adachi@...>
安達@沖データです。
まつもと ゆきひろです
まつもと ゆきひろです
[ruby-list:24221] Re: drb.rb: 0x40155740 is recycled object(IndexError)
石橋秀仁です。咳さん、お返事ありがとうございます。
> > 問題のスクリプトは何をしているかというと、
> > queueに入れたオブジェクトを、しばらくしてからpopしています。
> > そのものはいま出せないので、それに近いのを出します。
>
> 添付のスクリプトだと recycled object のエラーは出ないですよね。
>
> おそらく、queueに出し入れしているオブジェクトは、dumpできない
> ものではないですか ?
その通りです。popの返り値はoracle.rbのOracleオブジェクトです。
いわゆるウェブアプリサーバのDBコネクションプーラ機能です。
あらかじめ複数のコネクションを確保しておき、リクエストごとに
1つ使い、定期補充します。
同じエラーを再現するミニマムなスクリプト(svr.rb, clnt.rb)
を添付します。それぞれ別のターミナルで実行します。
ターミナル1: ruby svr.rb
ターミナル2: ruby clnt.rb
ターミナル3: ruby clnt.rb
# すばやくやるのがポイントです (^^;
ターミナル3でのclnt.rb起動時に、"recycled object"エラーになります。
> このとき、参照されているオブジェクトがGCされてしまうと例の
> エラーが出る可能性があります。
>
> 参照で送信されるオブジェクトをGCから守る方法は drb にはありませんので、
> なにか工夫してくださいません。すみません。
drbのオプションとしてそういう機能があるとうれしいです。
設定されたタイムアウト時間だけは参照を保持する機能(下記)。
> 咳は、時限付きセッションオブジェクトを作って参照しておくとか
> イテレータを使って保護したりしてます。
なるほど。イテレータ内スコープの変数に代入して、
イテレータ内だけの寿命を確保するわけですね。となると、
> サーバ側
> def query(s)
> result = some_query(s)
> yield(result)
> end
def query(s)
yield(some_query(s))
end
と書くと、意味がないのですよね。
> あと、DRbIdConv を差し替えると objectのIDに依らない参照を実装できます。
> IDの代わりに名前(文字列)で参照したり、new()のパラメータで参照したり
> するというのも手です。
> (実は[ruby-list:23715]のflyaway.rbはこれをやろうとしてた)
IDに依らない参照ではありませんが、DRbIdConvに差し替えによって、
上述の「時限付き参照表」を作れますね。書いたので添付します
(drb_ref_id_conv.rb)。"recycled object"エラーは出ません。
また、タイムアウトによって、オブジェクトがGCされて、
捨てられているのを確認しました。
ObjectSpace.each_object(Foo) { count += 1 }
の部分です。画面に表示されるカウントでチェックできます。
これを使ってdrbを書き換えると、実際にリモートで参
照されている期間中だけGCされないようになります。
「タイムアウト」までの無駄な保持期間をなくせると思うので、
検討してみてください。>咳さん
> dRubyは応用編なページを書こうと思ってるのですが、
> 需要がなさそうで止まってます。
ぼくにお手伝いさせていただけることがあれば、ぜひ。
--
石橋秀仁 hideto@jobweb.co.jp ICQ: 83329246
http://www.rr.iij4u.or.jp/~hideto-i/index.html
Attachments (3)
require 'thread'
require 'drb/drb'
here = 'druby://localhost:17640'
class Queue
include DRbUndumped
end
class Foo
include DRbUndumped
def foo
self.id
end
end
queue = Queue.new
DRb.start_service(here, queue)
Thread.start do
while true
queue.push(Foo.new)
sleep 1
# count = 0
# ObjectSpace.each_object(Foo) { count += 1 }
# print "count=", count, "\n"
GC.start
end
end
DRb.thread.join
require 'drb/drb' there = 'druby://localhost:17640' DRb.start_service(nil) queue = DRbObject.new(nil, there) while true obj = queue.pop print obj.id, ':', obj.foo, "\n" end
require 'drb/drb'
class DRbRefIdConv
def initialize(time_to_live)
@time_to_live = time_to_live
@thr_table = {} # {id => object}
@obj_table = {} # {id => killer thread}
@thr_sync = Mutex.new
@obj_sync = Mutex.new
end
def to_obj(id)
obj = ObjectSpace._id2ref(id)
set_killer(id)
set_obj(id, obj)
obj
end
def to_id(obj)
id = obj.id
set_killer(id)
set_obj(id, obj)
id
end
private
# note: set_killer before set_obj
def set_obj(id, obj)
@obj_sync.synchronize do
@obj_table[id] = obj
end
end
def set_killer(id) # reset killer
@thr_sync.synchronize do
thr = @thr_table[id]
Thread.kill(thr) if thr
@thr_table[id] = killer(id)
end
end
def killer(id)
Thread.start do
sleep(@time_to_live)
@obj_sync.synchronize do
@obj_table[id] = nil
end
end
end
end
if $0 == __FILE__
require 'thread'
class Queue
include DRbUndumped
end
class Foo
include DRbUndumped
def initialize(n)
@n = n
end
def foo
@n
end
end
here = ARGV.shift
queue = Queue.new
DRb.install_id_conv(DRbRefIdConv.new(5))
DRb.start_service(here, queue)
Thread.start do
i = 0
loop do
queue.push(Foo.new(i))
i = i + 1
sleep 1
count = 0
ObjectSpace.each_object(Foo) { count += 1 }
print "count=", count, "\n"
GC.start
end
end
DRb.thread.join
end