Вы уже получили несколько ответов, особенно некоторые относительно Timeout
.
Пожалуйста, будьте осторожны. Timeout
осуществляется с сигналом ТРЕВОГА в стандартном рубина (то есть, я не говорю о JRuby здесь), что означает
- Вы не можете вкладывать таймауты (то есть, вы можете, но он будет молча терпеть неудачу).
- Если ваш код или какой-либо драгоценный камень также используют сигнал ALARM, это пойдет не так.
- Все может поступить неправильно (неожиданное поведение) из-за того, что это такой неуклюжий механизм.
- Не пытайтесь смешивать его с «зеленым многопоточным» стандартным рубином, если вам не нравятся серьезные головные боли.
Если вы можете, то всегда будет безопаснее как-то делать свой тайм-аут самостоятельно. То есть, если вы можете, то у вас есть method
проверка на время, проведенное регулярно. Конечно, это может быть или не быть полезным для вас; вы не хотите приносить тестовые материалы в ваш производственный код. И может быть сложно, если вы хотите тайм-аут системных вызовов (например, блокирование сетевых вызовов).
По крайней мере, имейте это в виду.
Использовать 'Тайм-аут': http://ruby-doc.org/stdlib-2.3.1/libdoc/timeout/rdoc/Timeout.html –
Спасибо, это очень полезно –