同时支持异步和同步调用的Python上下文管理器

2024-06-17 11:22:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在构建一个用工厂初始化/注入的上下文管理器,它创建资源实例,然后由上下文管理器管理

我有两个不同的工厂: 工厂 异步工厂

其中创建资源的标准版本。另一个创建资源的异步版本

目前我有两个上下文管理器:ContextManager和AsyncContextManager。在查看我的代码时,我意识到上下文管理器init和助手函数在两种实现中都是相同的

一个选项是创建BaseContextManager,然后继承此通用功能

另一种方法是合并到一个上下文管理器中,该管理器具有enterexitaenteraexit方法实现。即

class ContextManager

    def __init__(self, a, b, c)
       ...

    def __enter__(self):
       ...

    def __exit__(self):
       ...

    def __aenter__(self):
       ...

    def __aexit__(self):
       ...

    def helper()
      ...

然后取决于调用“with”还是“async with”,它是否以异步方式工作

想知道人们对这种上下文管理器有什么想法。我最初的感觉是,我把他们当作两个经理,这样可以避免在一个班上做太多事情,但我对其他观点感兴趣


Tags: 实例方法self版本管理器init工厂def