在回调中调用EventMachine延迟?

时间:2016-01-17 05:35:02

标签: ruby eventmachine

我正在使用EventMachine.defer来处理一些长时间运行的进程(无限期地等待来自外部应用程序的响应)。我想循环执行此操作:每次应用程序响应时,我都会处理响应,然后立即开始等待下一个响应。

我的代码目前看起来像这样:

def watch_for_songs_change
  EM.defer(
    ->( ){ `mpc idle playlist` }, # wait for the song list to change
    ->(_){ update_songs; watch_for_songs_change }
  )
end

我意识到这是在defer的回调中调用defer。这有效吗?我是从另一个内部产生一个线程,最终会用完线程吗?或者EventMachine在将线程返回池后调用回调?

1 个答案:

答案 0 :(得分:0)

我曾试图在EM之前将这样的调用链接起来,并发现使用周期性定时器通常是更好的设计。

@timer = EventMachine.add_periodic_timer( 1 ) { `mpc idle playlist` and update_songs }