Redis python client 锁的使用

感觉这里的锁去掉也没有问题
def poll_queue(conn):
    while not QUIT:
        //获取队列中第一个任务
        item = conn.zrange('delayed:',0,0,withscores=True)
        //队列中内有包含任务或者任务的执行时间未到
        if not item or item[0][1] > time.time():
            time.sleep(.01)
            continue        
         //解码要被执行的任务,弄清楚它应该被推入哪个任务队列里面
        item = item[0][0]
        
        //identifier:任务标识符
        //queue:任务将要被添加到的队列的名字
        //function:回调函数
        //args:参数
        identifier,queue,function,args = json.loads(item)
        
        //获取锁
        locked = acquire_lock(conn,identifier)
        if not locked:
            continue
         //把任务从延时队中移除,并添加到 特定的队列中 执行
        if conn.zrem('delayed:',item):
            conn.rpush('queue:' + queue,item)
         
        //释放锁
        release_lock(conn,identifier,locked)
if conn.zrem('delayed:',item):
     conn.rpush('queue:' + queue,item)

假如多线程的情况下,上面的删除与添加操作如果不加锁,会有什么bug?

阅读 1.3k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题