1
require 'celluloid/current'

Celluloid.shutdown_timeout = 1

class Mapper
  include Celluloid

  attr_accessor :value

  def run(num)
      @value = num.times.map { |idx| idx  } 
  end

end

 y = Mapper.spawn
 y.future.run(1000000)

到目前为止,它似乎可以正常工作,并且演员会在 1 秒后关闭。

  y.value

但是当我尝试像上面那样访问值时,它会一直持续到从方法调用返回的值可用。

我的想法是像标准 Timeout.timeout(1) {}一样使用 Celluloid.shutdown_timeout

如果超过 1 秒的时间限制,则终止该块 [ Timeout.timeout(1)因行为不端而臭名昭著,因此不使用它]

使用赛璐珞演员实现这一目标的正确方法是什么?

4

1 回答 1

0

不,这不是shutdown_timeout工作原理。

Celluloid.shutdown_timeout用于at_exit在底层进程终止时关闭参与者。当进程收到终止信号时使用它。

你确实需要把Timeout.timeout {}块放进去,但你是对的,那些确实行为不端。

于 2016-04-05T18:20:23.937 回答