A collection of helper functions to implement transactional operations.
Project description
k3txutil
A collection of helper functions to implement transactional operations.
k3txutil is a component of pykit3 project: a python3 toolkit set.
Name
txutil
Status
This library is considered production ready.
Description
A collection of helper functions to implement transactional operations.
Exceptions
CASConflict
syntax:
CASConflict()
User should raise this exception when a CAS conflict detect in a user defined
set
function.
Install
pip install k3txutil
Synopsis
import k3txutil
import threading
class Foo(object):
def __init__(self):
self.lock = threading.RLock()
self.val = 0
self.ver = 0
def _get(self, db, key, **kwargs):
# db, key == 'dbname', 'mykey'
with self.lock:
return self.val, self.ver
def _set(self, db, key, val, prev_stat, **kwargs):
# db, key == 'dbname', 'mykey'
with self.lock:
if prev_stat != self.ver:
raise k3txutil.CASConflict(prev_stat, self.ver)
self.val = val
self.ver += 1
def test_cas(self):
for curr in k3txutil.cas_loop(self._get, self._set, args=('dbname', 'mykey', )):
curr.v += 2
print((self.val, self.ver)) # (2, 1)
while True:
curr_val, stat = getter(key="mykey")
new_val = curr_val + ':foo'
try:
setter(new_val, stat, key="mykey")
except CASConflict:
continue
else:
break
#`cas_loop` simplifies the above workflow to:
for curr in k3txutil.cas_loop(getter, setter, args=("mykey", )):
curr.v += ':foo'
Author
Zhang Yanpo (张炎泼) drdr.xp@gmail.com
Copyright and License
The MIT License (MIT)
Copyright (c) 2015 Zhang Yanpo (张炎泼) drdr.xp@gmail.com
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
k3txutil-0.1.0.tar.gz
(4.0 kB
view hashes)