0

コードは次のとおりです。

while 1
    input = gets
    puts input
end

これが私がやりたいことですが、その方法がわかりません。コードの複数のインスタンスを作成してバックグラウンドで実行し、特定のインスタンスに入力を渡すことができるようにしたいです。

Q1: バックグラウンドでスクリプトの複数のインスタンスを実行するにはどうすればよいですか?

Q2: スクリプトの個々のインスタンスを参照して、インスタンスに入力を渡すにはどうすればよいですか (Q3)?

Q3: スクリプトは cmd "gets" を使用して入力を受け取ります。入力を個々のスクリプトの get に渡すにはどうすればよいですか?

例えば

バックグラウンドでコードの 3 つのインスタンスを実行していて、そのインスタンスをそれぞれ #1、#2、および #3 と呼んでいるとします。私は #1 に "hello" を渡し、#1 は "hello" を画面に表示します。次に、#3 に "world" を渡し、#3 が "hello" を画面に表示します。

ありがとう!

更新:自分の質問に答えました。この素晴らしいチュートリアルを見つけました: http://rubylearning.com/satishtalim/ruby_threads.htmlとリソースはこちら: http://www.ruby-doc.org/core/classes/Thread.html#M000826 .

puts Thread.main

x = Thread.new{loop{puts 'x'; puts gets; Thread.stop}}
y = Thread.new{loop{puts 'y'; puts gets; Thread.stop}}
z = Thread.new{loop{puts 'z'; puts  gets; Thread.stop}}

while x.status != "sleep" and y.status != "sleep" and z.status !="sleep"
    sleep(1)
end

Thread.list.each {|thr| p thr }

x.run
x.join

みんな助けてくれてありがとう!私の考えを明確にしてくれました。

4

3 に答える 3

4

複数の Ruby コードを同時に実行したいということだと思います。Ruby スレッド (独自の落とし穴があります) を使用する難しい方法でも、OS のジョブ制御機能を使用してもかまいません。UNIX-y を使用している場合は、各デーモンのコードを別々の .rb ファイルに入れて、同時に実行することができます。

例えば、

# ruby daemon1.rb &
# ruby daemon2.rb &

Ruby プログラムで「入出力を処理する」方法はたくさんあります。パイプ、ソケットなど。デーモンについて尋ねられたので、ネットワーク I/O を意味していると思います。Net::HTTPを参照してください。

于 2011-07-07T03:28:58.617 に答える
2

複数のデーモンがすべて同時に STDIN をめぐって争うことで起こると思われることを無視します。

(1..3).map{ Thread.new{ loop{ puts gets } } }.each(&:join)

これにより、無期限にループする 3 つのスレッドが作成され、入力を要求してから出力します。各スレッドは「結合」され、各スレッドが完了するまでメインプログラムが終了するのを防ぎます (決して終了することはありません)。

于 2011-07-07T02:53:48.747 に答える
-3

複数のデーモンを実行して制御する機能を持つmulti_daemons gem を使用してみてください。

# this is server.rb

proc_code = Proc do
  loop do
    sleep 5
  end
end

scheduler = MultiDaemons::Daemon.new('scripts/scheduler', name: 'scheduler', type: :script, options: {})
looper = MultiDaemons::Daemon.new(proc_code, name: 'looper', type: :proc, options: {})
MultiDaemons.runner([scheduler, looper], { force_kill_timeout: 60 })

開始および停止するには

ruby server.rb start
ruby server.rb stop
于 2018-11-22T06:42:08.267 に答える