Python 操作序列的原子执行框架
我有几个有副作用的函数(在程序内存之外) 我想编写一个程序,以原子方式执行一系列操作(函数调用),这样,如果该序列的任何操作失败,先前执行的操作都会回滚 我找不到任何这样做的图书馆,所以我开始自己写一些东西 我的想法是在上下文管理器中包装操作,例如:Python 操作序列的原子执行框架,python,function,atomic,operation,Python,Function,Atomic,Operation,我有几个有副作用的函数(在程序内存之外) 我想编写一个程序,以原子方式执行一系列操作(函数调用),这样,如果该序列的任何操作失败,先前执行的操作都会回滚 我找不到任何这样做的图书馆,所以我开始自己写一些东西 我的想法是在上下文管理器中包装操作,例如: def f1(a): #a function with side effects pass #... with AtomicOperation() as a: a.f1( arg ) a.f2( arg2 )
def f1(a):
#a function with side effects
pass
#...
with AtomicOperation() as a:
a.f1( arg )
a.f2( arg2 )
somevariable= a_function_without_side_effects()
a.f3( arg3 )
通过一些getattr
和partial
欺骗,这似乎是可行的
这似乎是一个合理的设计吗?您必须恢复到以前的状态,这在数据库关系世界中很容易。但我认为你的情况是不同的,所以这是一个很好的阅读为你 这在一般情况下是不可能的。想象一下如果
f1
发送电子邮件。您的上下文管理器无法扭转这种局面。@TavianBarnes当然可以。让我们假设,对于任何原子执行的函数f
,我们有一个函数g
,它可以逆转f
的副作用,并且我们已经知道映射{f:g}
了。那是可能的。