Sha256: 1abc417812b6a137c34e0bbf42d44894d929aa24487d80dbfa63e9d8223d8ec8
Contents?: true
Size: 1.64 KB
Versions: 2
Compression:
Stored size: 1.64 KB
Contents
require 'main_loop/handler' module MainLoop class ThreadHandler < MainLoop::Handler attr_reader :thread def initialize(dispatcher, name, **kwargs, &block) super @handler_type = 'Thread' @thread = nil dispatcher.add_handler(self) run(&block) if block_given? end def id @thread&.object_id.to_s end def reap(status) logger.info "Thread[#{name}] exited: thread:#{@thread} Status:#{status}" @thread = nil @finished = true @success = false return if terminating? handle_retry end def term unless @thread @terminating_at ||= Time.now logger.debug "Thread[#{name}] alredy terminated. Skipped." return end if terminating? @success = false logger.info "Thread[#{name}] send force terminate: KILL thread:#{@thread}" @thread.kill rescue nil else @terminating_at ||= Time.now logger.info "Thread[#{name}] send terminate: thread:#{@thread}" end end def kill unless @thread logger.debug "Thread[#{name}] alredy Killed. Skipped." return end @success = false logger.info "Thread[#{name}] send kill: thread:#{@thread}" @thread.kill rescue nil end def run(&block) return if terminating? @block = block start_thread(&@block) end protected def start_thread @thread = Thread.new do yield(self) ensure publish("reap:#{id}:exited") end @finished = false logger.info "Thread[#{name}] created: thread:#{@thread}" end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
main_loop-0.1.2.16854 | lib/main_loop/thread_handler.rb |
main_loop-0.1.2.16825 | lib/main_loop/thread_handler.rb |