Skip to content

Instantly share code, notes, and snippets.

@ManickYoj
Last active April 5, 2022 01:22
Show Gist options
  • Save ManickYoj/0ba72b5582df5bf4cacf7eb019609152 to your computer and use it in GitHub Desktop.
Save ManickYoj/0ba72b5582df5bf4cacf7eb019609152 to your computer and use it in GitHub Desktop.
def operation(iteration)
# ... As implementd above
end
# Only runs if the file is the entry point for execution,
# but not if loaded as a library
if $0 == __FILE__
puts "[INFO #{Time.now}] #--- Starting Worker Program ---#"
thread = nil
iteration = 0
begin
# Main loop
while true
thread = Thread.new{ operation(iteration) }
# Wait for thread to complete before proceeding. Otherwise, this while
# loop would quickly spin up the maximum number of threads all running
# concurrently.
thread.join
iteration += 1
end
# This block only runs when the program is about to exit. It waits for
# the running thread to complete before continuing with the exit operation
rescue SignalException => e
puts "[WARN #{Time.now}] #--- INTERRUPT RECEIVED ---#"
puts "[WARN #{Time.now}] Waiting for current iteration to complete. " \
"Interrupt again for immediate (unsafe) termination."
# Wait for the currently running thread to exit before continuing execution
thread.join
puts "[INFO #{Time.now}] #--- ITERATION COMPLETED. EXITING SAFELY ---#"
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment