Ruby 基于异步方法恢复光纤
我不明白,为什么这个代码不起作用。 我试图做的是使用光纤模拟同步代码行为Ruby 基于异步方法恢复光纤,ruby,ruby-1.9,fibers,Ruby,Ruby 1.9,Fibers,我不明白,为什么这个代码不起作用。 我试图做的是使用光纤模拟同步代码行为 require 'fiber' require 'eventmachine' def async_request(url) f = Fiber.current Thread.new do sleep 0.3 puts 'Resuming Fiber' f.resume('page fetched #{url}') end end def async_get(url) async
require 'fiber'
require 'eventmachine'
def async_request(url)
f = Fiber.current
Thread.new do
sleep 0.3
puts 'Resuming Fiber'
f.resume('page fetched #{url}')
end
end
def async_get(url)
async_request url
val = Fiber.yield
return val
end
EM.run do
Fiber.new do
puts 'Fiber Started'
page = async_get('http://www.whatever.com')
puts page
end.resume
end
运行此代码时,输出为:
$ ruby fiber_poc.rb
Fiber Started
Resuming Fiber
光纤永远不会恢复。
你能解释一下我怎么做吗
谢谢各位
require 'fiber'
require 'eventmachine'
def async_request(url)
f = Fiber.current
EM.add_timer(0.3) do
puts 'Resuming Fiber'
f.resume("page fetched #{url}")
end
end
def async_get(url)
async_request url
Fiber.yield
end
EM.run do
Fiber.new do
puts 'Fiber Started'
page = async_get('http://www.whatever.com')
puts page
EM.stop
end.resume
end
你会得到
#=> Fiber Started
#=> Resuming Fiber
#=> page fetched http://www.whatever.com
谢谢@fl00r。接得好。为什么线不能使用?无论如何谢谢你!