Last active
April 5, 2022 01:22
-
-
Save ManickYoj/0ba72b5582df5bf4cacf7eb019609152 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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