def test_qsize(self): """测试qsize()""" queue_qsize = RedisQueue("queue_qsize_" + self.key_rand) self.keys.append(queue_qsize.key) self.del_key(queue_qsize.key) num = random.randint(1, 10) for i in range(num): queue_qsize.put(i) self.assertEqual(queue_qsize.qsize(), num)
def test_put(self): """测试put()""" queue_put = RedisQueue("queue_put_" + self.key_rand) self.keys.append(queue_put.key) items = [x for x in range(random.randint(1, 10))] for i in items: qsize = queue_put.put(i) self.assertEqual(queue_put.qsize(), qsize) for i in items: item = queue_put.get() self.assertEqual(item, i)
class PutThread(threading.Thread): def __init__(self, flag, *args, **kwargs): threading.Thread.__init__(self, *args, **kwargs) self.q = RedisQueue('test') self.flag = flag def run(self): if self.q.lock(30): for i in range(10): time.sleep(0.001) self.q.put(self.flag + '_' + str(i)) self.q.unlock() else: print('locked')
def que(self): # 返回一个队列,并在使用后清除该队列 q = RedisQueue('tests') # 此处返回的即为que的值 yield q # yield 前面属于setUp部分,后面属于tearDown import redis r = redis.Redis() r.delete(q.key)
def test_lock(self): """测试加锁""" queue_lock = RedisQueue("queue_lock_" + self.key_rand) self.keys.append(queue_lock.key) # 加锁 无锁时加锁 self.assertTrue(queue_lock.lock(5)) # 加锁 有锁时加锁 self.assertFalse(queue_lock.lock()) # 加锁 超时后加锁 time.sleep(6) self.assertTrue(queue_lock.lock()) # 加锁 解锁后加锁 queue_lock.unlock() self.assertTrue(queue_lock.lock())
def test_empty(self): """测试empty()""" queue_empty = RedisQueue("queue_empty_" + self.key_rand) self.keys.append(queue_empty.key) self.del_key(queue_empty.key) self.assertTrue(queue_empty.empty()) queue_empty.put("empty") self.assertFalse(queue_empty.empty())
def __init__(self, flag, *args, **kwargs): threading.Thread.__init__(self, *args, **kwargs) self.q = RedisQueue('test') self.flag = flag
import threading import time class PutThread(threading.Thread): def __init__(self, flag, *args, **kwargs): threading.Thread.__init__(self, *args, **kwargs) self.q = RedisQueue('test') self.flag = flag def run(self): if self.q.lock(30): for i in range(10): time.sleep(0.001) self.q.put(self.flag + '_' + str(i)) self.q.unlock() else: print('locked') if __name__ == '__main__': for i in range(50): t = PutThread(daemon=True, flag=str(i)) t.start() time.sleep(0.01) q = RedisQueue('test') time.sleep(5) while not q.empty(): print(q.get())
def test_get_nowait_when_empty(self): """测试异常""" queue_err = RedisQueue("queue_err_" + self.key_rand) self.del_key(queue_err.key) with self.assertRaises(EmptyError): queue_err.get_nowait()
def test_serialize_name_error(): with pytest.raises(NameError) as e: RedisQueue('tests', serialized="233")