我正在使用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在将线程返回池后调用回调?
答案 0 :(得分:0)
我曾试图在EM之前将这样的调用链接起来,并发现使用周期性定时器通常是更好的设计。
@timer = EventMachine.add_periodic_timer( 1 ) { `mpc idle playlist` and update_songs }