threaded.rb 924 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. require 'thread'
  2. def stop
  3. puts 'Exiting...'
  4. @scheduler.stop
  5. @dj.stop
  6. @stream.stop
  7. end
  8. def safely(&block)
  9. begin
  10. yield block
  11. rescue StandardError => e
  12. STDERR.puts "\nException #{e.message}:\n#{e.backtrace.join("\n")}\n\n"
  13. STDERR.puts "Terminating myself ..."
  14. stop
  15. end
  16. end
  17. threads = []
  18. threads << Thread.new do
  19. safely do
  20. @stream = TwitterStream.new
  21. @stream.run
  22. puts "Twitter stream stopped ..."
  23. end
  24. end
  25. threads << Thread.new do
  26. safely do
  27. @scheduler = HuginnScheduler.new
  28. @scheduler.run!
  29. puts "Scheduler stopped ..."
  30. end
  31. end
  32. threads << Thread.new do
  33. safely do
  34. require 'delayed/command'
  35. @dj = Delayed::Worker.new
  36. @dj.start
  37. puts "Delayed job stopped ..."
  38. end
  39. end
  40. # We need to wait a bit to let delayed_job set it's traps so we can override them
  41. sleep 0.5
  42. trap('TERM') do
  43. stop
  44. end
  45. trap('INT') do
  46. stop
  47. end
  48. threads.collect { |t| t.join }