redis 加锁和释放锁只能再同一个线程进行

 

 

 

"""
@des: 经过测试,redis的锁只能在同一个线程进行加锁,释放,如果要强制释放,r.delete(lockkey)
"""

from twisted.internet import reactor
import redis,time

class Yx(object):
    def __init__(self):
        self.r = redis.Redis(host='localhost',port=9999,db=1)
        self.lock = self.r.lock("123", blocking_timeout=10,sleep=0.1)
    
    def haha1(self):
       getlock = self.lock.acquire()
       if getlock: 
            time.sleep(60)
            try:
                self.lock.release()
            except Excepiton,e:
                print e
                print "release 1 error"
       print "end1"
   
    def haha2(self):
       getlock = self.lock.acquire(blocking_timeout=5)
       try:
            self.lock.release()       
       except Exception,e:
            print e
            print "release 2 error"
       finally:
            pass
            #self.r.delete("123")
       print "end2"
       
if __name__=="__main__":
    yx = Yx()
    reactor.callInThread(yx.haha1)
    def tt():
        for i in xrange(1,11):
            yx.haha2()
    reactor.callLater(1,tt)
    reactor.run()
#####################################
Cannot release an unlocked lock
release 2 error
end2
Cannot release an unlocked lock
release 2 error
end2
Cannot release an unlocked lock
release 2 error
end2
Cannot release an unlocked lock
release 2 error
end2
Cannot release an unlocked lock
release 2 error
end2
Cannot release an unlocked lock
release 2 error
end2
Cannot release an unlocked lock
release 2 error
end2
Cannot release an unlocked lock
release 2 error
end2
Cannot release an unlocked lock
release 2 error
end2
Cannot release an unlocked lock
release 2 error
end2
end1

分享到: 微信 更多