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 つは、タイムアウト メソッドが常に厳密に適用されるわけではなく、多くの要因によってタイムアウトが妨げられる可能性があることです。