def begin_transaction(self, table, wait=False):
"Locks and copies table while optionally waiting for unlock."
table = self.__data.where(name=table)
assert table.first('type') is not _View, 'Views are not supported!'
lock = table.first('lock')
if wait:
lock.acquire()
with self.__lock: # Protects Critical Section
data = table.first('data')
table.update(copy=copy.deepcopy(data))
else:
with self.__lock:
assert lock.acquire(False), 'Table is locked in a transaction!'
data = table.first('data')
table.update(copy=copy.deepcopy(data))
return data
评论列表
文章目录