Created
August 24, 2012 07:15
-
-
Save jimsynz/3447035 to your computer and use it in GitHub Desktop.
Qu worker that uses EventMachine.
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
class QuEmWorker < Qu::Worker | |
def start | |
EM.next_tick do | |
Thread.new do | |
logger.warn "Worker #{id} starting" | |
Qu.backend.register_worker(self) | |
EM.add_shutdown_hook do | |
Qu.backend.unregister_worker(self) | |
logger.debug "Worker #{id} done" | |
end | |
EM.add_periodic_timer 1 do | |
do_work Qu.reserve(self, block: false) | |
end | |
end | |
end | |
end | |
def work_off | |
logger.debug "Worker #{id} working of all jobs" | |
while job = Qu.reserve(self, block: false) | |
do_work job | |
end | |
end | |
def work | |
logger.debug "Worker #{id} waiting for next job" | |
do_work Qu.reserve(self) | |
end | |
def id | |
@id ||= "#{hostname}:#{pid}:#{thread_id}:#{queues.join(',')}" | |
end | |
private | |
def do_work(job) | |
if job | |
logger.debug "Worker #{id} reserved job #{job}" | |
EM.defer -> { job.perform }, ->(_) {logger.debug "Worker #{id} completed job #{job}"} | |
end | |
end | |
def keep_going? | |
!!@keep_going | |
end | |
def thread_id | |
Thread.current.object_id.to_s(16) | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment