2009-04-09 3 views

Répondre

4

timeout.rb a quelques problèmes où fondamentalement cela ne fonctionne pas toujours bien, et je ne recommanderais pas de l'utiliser. Vérifiez System Timer ou Terminator à la place

La page System Timer décrit en particulier pourquoi timeout.rb peut échouer, avec de jolies images et tout. Bottom line est:

  • Pour timeout.rb travailler, un fraîchement créé « homicide » fil Ruby doit être prévue par l'interpréteur Ruby.
  • M.R.I. 1.8, l'interpréteur utilisé par la plupart des applications Ruby en production, implémente les threads Ruby comme des fils verts.
  • Il est une limitation bien connue des threads verts (s'exécutant sur un seul thread natif) que lorsqu'un thread vert effectue un appel système bloquant sur les systèmes d'exploitation sous-jacents, aucun thread vert dans la machine virtuelle ne s'exécute jusqu'à ce que l'appel système revienne.
0

Pour éviter une erreur laide sur timeout je suggère l'enfermer et en utilisant une opération de sauvetage comme celui-ci:

begin 
    status = Timeout::timeout(5) do 
     #Some stuff that should be interrupted if it takes too long 
    end  
rescue Timeout::Error 
    puts "Error message: It took too long!\n" 
end 
Questions connexes