ruby 进行双进程或多进程,并且设置时间

来源:互联网 发布:怎么用淘宝卖东西 编辑:程序博客网 时间:2024/06/07 04:43

在ruby的编程中,因为在进行编写时需要进行时间的限定,双进程或者多进程的运行,就要控制整体的代码编写

搭建rpc服务代码:

require 'nokogiri'require 'xmlrpc/server'class MyHandler  def func1     i=0     while i<=2       puts i        puts "func1 at: #{Time.now}"        sleep(2)        i=i+1     end  end  def func2     j=0     while j<=2       puts j        puts "func2 at: #{Time.now}"        sleep(1)        j=j+1     end  end  def sumAndDifference(a, b)    puts @good="oooo"    puts b=a*b    #{ "sum" => a + b, "difference" => a - b ,"@good" =>@good}    return (b.to_s+"<##>"+a.to_s+"<##>"+good("1314"))  end  def sumAndDifference1(a, b)    puts "Started At #{Time.now}"    name=""    t1=Thread.new{func1()}    t2=Thread.new{func2()}    t3=Thread.new{name=sumAndDifference(a,b)}    t1.join    t2.join    t3.join    puts "End at #{Time.now}"    puts "name="+name.to_s
    return name  endends = XMLRPC::Server.new(1212)s.add_handler("sample", MyHandler.new)trap("INT") { s.shutdown }s.serve
进行代码的调用
require 'xmlrpc/client'server = XMLRPC::Client.new2("http://127.0.0.1:1212/")puts server.call("sample.sumAndDifference1",5,3).inspect
rpc运行结果:
[2014-08-08 09:16:28] INFO  WEBrick 1.3.1[2014-08-08 09:16:28] INFO  ruby 1.9.3 (2013-02-22) [i386-mingw32][2014-08-08 09:16:28] INFO  WEBrick::HTTPServer#start: pid=3968 port=1215Started At 2014-08-08 09:16:30 +080000oooofunc1 at: 2014-08-08 09:16:30 +0800func2 at: 2014-08-08 09:16:30 +0800151func2 at: 2014-08-08 09:16:31 +080012func1 at: 2014-08-08 09:16:32 +0800func2 at: 2014-08-08 09:16:32 +08002func1 at: 2014-08-08 09:16:34 +0800End at 2014-08-08 09:16:36 +0800name=15<##>5<##>1314_____good
调用的的运行结果:
"15<##>5<##>1314_____good"
在进行数据的掉用是是进行三个进程同时运行,在运行时会出现三个进程同时运行,但是时间是按照最晚的也就是最长的进行,如需要进行时间的限制代码为
t2=Thread.new{name=sumAndDifference(func1()}  #调用方法
strnThread=t2.join(5)  #进行时间的添加,单位为s
这样当时间超过5s后没有返回值则进行下一代码的运行,但还是会出现问题,就是子程序时间超时后,主程序进行下一阶段,但是子程序继续进行,直到运行完毕。为了避免子程序进行继续运行在java中可以将t2.setDaemon()的值设计为true,代码t2.setDaemon(true),但是在ruby中没有该类,这进行kill方式进行去除。(当然需要进行有该子程序所以要进行判断)代码为 t2.kill if strnThread!=nil
O(∩_∩)O
0 0
原创粉丝点击