在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
end
end
s = 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=1215
Started At 2014-08-08 09:16:30 +0800
00
oooo
func1 at: 2014-08-08 09:16:30 +0800
func2 at: 2014-08-08 09:16:30 +080015
1
func2 at: 2014-08-08 09:16:31 +0800
12
func1 at: 2014-08-08 09:16:32 +0800func2 at: 2014-08-08 09:16:32 +0800
2
func1 at: 2014-08-08 09:16:34 +0800
End at 2014-08-08 09:16:36 +0800
name=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