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}
了。那是可能的。