Example #1
0
class TOfflineDequeingService(service.Service, RedisMixin):
    def __init__(self, queue_name, timeout):
        self.queue = Queue(name=queue_name)
        self.timeout = timeout
        self.stopped = False
    
    def callback_perform(self, result):
        if not self.stopped:
            reactor.callWhenRunning(self.dequeue)
    
    def callback_dequeue(self, job):
        if not job is None:
            d = threads.deferToThread(job.perform)
            d.addCallback(self.callback_perform)
            return d
        if not self.stopped:
            reactor.callWhenRunning(self.dequeue)
        return defer.succeed(None)
    
    def dequeue(self):
        d = self.queue.dequeue(self.timeout)
        d.addCallback(self.callback_dequeue)
    
    def startService(self):
        reactor.callLater(1, self.dequeue)
        service.Service.startService(self)
    
    def stopService(self):
        service.Service.stopService(self)
        self.stopped = False
Example #2
0
class TInlineDequeingService(service.Service, RedisMixin):
    def __init__(self, queue_name, blocking_time):
        self.queue = Queue(name=queue_name)
        self.blocking_time = blocking_time
        self.stopped = False
    
    @defer.inlineCallbacks
    def dequeue(self):
        while not self.stopped:
            try:
                job = yield self.queue.dequeue(self.blocking_time)
                if not job is None:
                    yield threads.deferToThread(job.perform)
            except (UnpickleError, NoSuchJobError) as e:
                log.msg('Exception %s fetching job'%(e.__class__.__name__), e)                
            except Exception as e:
                log.msg('Exception %s dequeing job %s:'%(e.__class__.__name__, str(job)), e)
                raise
    
    def startService(self):
        reactor.callLater(1, self.dequeue)
        service.Service.startService(self)

    def stopService(self):
        service.Service.stopService(self)
        self.stopped = True