def run(self, queue_name='default', sleep_time=1, verbose=False): """Worker process: ties to the given queue and handle all incoming tasks @queue_name - name of the queue to tie with @sleep_time - pause time between two tasks""" queue = Queue() while not self.SHUTDOWN_IN_PROGRESS: try: if verbose: print '[remaining tasks number: %s] ' % queue.length(queue_name), result = queue.pop(queue_name=queue_name, timeout=10) except Exception, e: result = None print >> sys.stderr, 'An exception occurs during the proc processing: %s' % e if verbose: print result time.sleep(sleep_time)
class TestRedisQueue(unittest.TestCase): def setUp(self): self.redis_args = dict(host='127.0.0.1', port=6379) self.key = 'test_redis_queue' self.queue = Queue(self.key, **self.redis_args) def tearDown(self): redis = Redis(**self.redis_args) redis.delete(self.key) def test_right(self): self.queue.append('one') self.queue.append('two') self.queue.append('three') self.assertEqual(self.queue.pop(), 'three') self.assertEqual(self.queue.pop(), 'two') self.assertEqual(self.queue.pop(), 'one') self.assertRaises(IndexError, self.queue.pop) def test_left(self): self.queue.appendleft('one') self.queue.appendleft('two') self.queue.appendleft('three') self.assertEqual(self.queue.popleft(), 'three') self.assertEqual(self.queue.popleft(), 'two') self.assertEqual(self.queue.popleft(), 'one') self.assertRaises(IndexError, self.queue.pop) def test_right_left(self): self.queue.append('one') self.queue.append('two') self.queue.append('three') self.assertEqual(self.queue.popleft(), 'one') self.assertEqual(self.queue.popleft(), 'two') self.assertEqual(self.queue.popleft(), 'three') self.assertRaises(IndexError, self.queue.pop) def test_left_right(self): self.queue.appendleft('one') self.queue.appendleft('two') self.queue.appendleft('three') self.assertEqual(self.queue.pop(), 'one') self.assertEqual(self.queue.pop(), 'two') self.assertEqual(self.queue.pop(), 'three') self.assertRaises(IndexError, self.queue.pop) def test_clear(self): self.queue.appendleft('one') self.queue.appendleft('two') self.queue.appendleft('three') self.queue.clear() self.assertRaises(IndexError, self.queue.pop) self.assertRaises(IndexError, self.queue.popleft) def test_remove(self): self.queue.append('one') self.queue.append('two') self.queue.append('two') self.queue.append('three') self.queue.append('two') self.queue.remove('two') self.assertEqual(self.queue.pop(), 'three') self.assertEqual(self.queue.pop(), 'one') self.assertRaises(IndexError, self.queue.pop) def test_contains(self): self.queue.append('one') self.queue.append('two') self.queue.append('three') self.assert_('one' in self.queue) self.assert_('two' in self.queue) self.assert_('three' in self.queue) self.assert_('four' not in self.queue) def test_extend_right(self): self.queue.extend(['one', 'two', 'three']) self.assertEqual(self.queue.pop(), 'three') self.assertEqual(self.queue.pop(), 'two') self.assertEqual(self.queue.pop(), 'one') self.assertRaises(IndexError, self.queue.pop) def test_extend_left(self): self.queue.extendleft(['one', 'two', 'three']) self.assertEqual(self.queue.popleft(), 'three') self.assertEqual(self.queue.popleft(), 'two') self.assertEqual(self.queue.popleft(), 'one') self.assertRaises(IndexError, self.queue.pop) def test_iteration(self): self.queue.append('one') self.queue.append('two') self.queue.append('three') self.assertEqual(list(iter(self.queue)), ['one', 'two', 'three']) def test_length(self): self.queue.append('one') self.queue.append('two') self.queue.append('three') self.assertEqual(len(self.queue), 3)