class QueueManager(ThreadWorker): def __init__(self, *args, **kwargs): super(QueueManager, self).__init__(*args, **kwargs) self._queue = kwargs['queue'] self._max_queue_gets_per_time = kwargs['max_queue_gets_per_time'] self._queueman_is_running = kwargs['queueman_is_running'] self._rabbit_cfg = kwargs['rabbit_cfg'] self._know_queues = kwargs['know_queues'] self._rabbit = RabbitHandler(**self._rabbit_cfg) def run(self): try: self._process() except: self._logger.exception('Thread failure') def _process(self): while self._is_running.value: queues_puts_sum = 0 for queue in self._know_queues: self._logger.info('Processing queue %s' % (queue)) queue_puts = 0 for i in range(self._max_queue_gets_per_time): try: data = self._rabbit.get(queue) self._queue.put(queue, data) except Queue.Full: self._rabbit.reject() self._logger.warning('%s Queue full' % (queue)) break except RabbitEmpty: self._logger.warning('%s Queue empty' % (queue)) break except AMQPConnectionException: self._rabbit.disconnect() except Exception, e: self._logger.exception('Error %s' % (e)) self._logger.warning('----------------------------') else: self._rabbit.ack() queue_puts += 1 queues_puts_sum += queue_puts self._logger.info('%d elements puts' % (queue_puts)) self._logger.info('Switching queue') if queues_puts_sum == 0: sleep(5) self._rabbit.disconnect() self._queueman_is_running.clear() self._logger.info('Goodbye!')