Techioz Blog

Ruby でのシステムコール上のネストされたタイムアウトの問題

概要

Ruby(on Rails)のタイムアウトを使用しているときに、この奇妙な問題に遭遇しました。今回はタイムアウト

timeout(10) do
 //some code involving http calls that takes more than 10 seconds
end

動かない。しかし、このタイムアウト

timeout(20) do
 timeout(10) do
   //some code involving http calls that takes more than 10 seconds
 end
end

20秒後にタイムアウトします。システムコールが関係する場合、Ruby のタイムアウトが適切に機能しないと読みました。その場合、ネストされたタイムアウトの数も機能しないはずです。なぜこれが 2 回目のタイムアウトでも機能するのでしょうか?

私が参照したリンク: http://ph7spot.com/musings/system-timer

解決策

このようなことを行うには、タイムアウトとターミネータを組み合わせて使用するとうまくいくかもしれません。

タイムアウト メソッドの既知の欠点の 1 つは、タイムアウト メソッドが常に厳密に適用されるわけではなく、多くの要因によってタイムアウトが妨げられる可能性があることです。