test_transaction.py
# -*- coding: utf-8 -*-
from __future__ import absolute_import
from __future__ import unicode_literals
import redis
import time
from multiprocessing import Process
r = redis.StrictRedis(host='localhost', port=6379, db=0)
key = "abc"
def do(name, value):
with r.pipeline() as pipe:
try:
pipe.watch(key)
pipe.multi()
pipe.set(key, value)
time.sleep(1)
pipe.execute()
print "{} Success!!!".format(name)
except redis.exceptions.WatchError:
print "{} WatchError!!!".format(name)
p1 = Process(target=do, args=("p1", 1))
p1.start()
p2 = Process(target=do, args=("p2", 2))
p2.start()
time.sleep(3) #Attendez que le processus soit terminé
print r.get(key)
Résultat de l'exécution: % python test_redis.py p2 WatchError!!! p1 Success!!! 1
Il semble que vous pouvez annuler l'erreur. Ce n'est pas aussi bon à utiliser que RDBS, donc je sens que je peux le faire un peu.
Recommended Posts