如何最佳使用非并发Future?调试场景延迟执行方案选型
问题:延迟高成本对象的创建与修改,仅在调试时触发
场景描述
- 对象创建成本高昂;
- 对象后续修改成本高昂;
- 最终对象仅在代码中非常偏远的区域用于生成调试输出。
核心目标
仅在调试时才执行对象的创建与修改操作,同时避免将同一调试条件传递到创建、修改、使用这三个环节,确保对象仅在实际被使用时才完成创建和修改(而非提前执行,防止代码腐化)。
已考虑的方案分析
1. concurrent.futures
能实现延迟执行,但即使非调试状态下也会产生线程/进程创建的开销,不符合需求(可以接受调试时无加速优势,因为调试对速度要求低)。
2. 自定义同步Executor(非并发Future)
思路是从concurrent.futures.Executor派生SynchronousExecuter,实现无开销的延迟执行,想知道这是否是最佳选择。
3. 生成器
方案繁琐:一是生成器针对序列场景,而这里仅需单个对象;二是对象后续还需要被修改,适配起来麻烦。
4. 专用代理类
实现复杂度高于生成器,但使用时更透明。唯一缺点是无法支持重载运算符(比如路径拼接/),示例代码如下:
from pathlib import Path # 用于测试的任意类 from typing import Any class Delayed: def __init__(self, f, args=[], kwargs={}): self.__o = None self.f = f self.args = args self.kwargs = kwargs def __getattr__(self, __name: str) -> Any: if self.__o is None: f = self.f args = self.args kwargs = self.kwargs del self.f del self.args del self.kwargs self.__o = f(*args, **kwargs) return self.__o.__getattribute__(__name) # 使用示例 p = Delayed(Path, ('.',)) p.parent # 正常工作 p.absolute() # 正常工作 p / 'foo' # 报错,不支持运算符重载
问题
请问哪种方案最简洁?
内容的提问来源于stack exchange,提问作者Jann Poppinga
相关产品推荐
相关产品推荐

