用Python编写原子函数

问题描述 投票:0回答:1

在许多系统中,事务用于将操作分组在一起,以便它们是原子的——这意味着它们要么全部成功,要么全部失败。然而,Python 本身似乎没有内置对数据库上下文之外的事务的支持

例如我有两个函数如下:

create_user_record(user_record)
create_directory(directory_name)

我想将这些函数包装在一个操作中,如果其中一个函数失败,另一个函数也会失败。我怎样才能实现这个目标?

python python-3.x
1个回答
0
投票

在 Python 中创建原子函数有多种选择。它们通常被称为交易,通常需要进口。

  1. 您可以使用 sqlite3 并将其连接到您的 python3 程序,以开始事务并确保其完成。

  2. 您可以使用一堆 Try- except-finally 块来确保整个块已完成,如果没有完成则让它失败。

  3. 您可以创建一个手动提交和回滚操作的函数。

这是#2 的示例:

import os
import shutil

class AtomicOperation:
    def __enter__(self):         
        return self

    def __exit__(self, exc_type, exc_value, traceback):
        if exc_type:
            self.rollback()
        else:
            self.commit()

    def commit(self):

    def rollback(self):

def create_user_record(user_record):
    pass

def create_directory(directory_name):
    os.makedirs(directory_name)

def perform_operations(user_record, directory_name):
    with AtomicOperation() as operation:
        try:
            create_user_record(user_record)
            create_directory(directory_name)
        except Exception as e:
            print(f"Operation failed: {e}")
© www.soinside.com 2019 - 2024. All rights reserved.