子依赖结果缓存。 用于缓存子依赖的结果,以避免重复计算。
| 105 | |
| 106 | |
| 107 | class DependencyCache: |
| 108 | """子依赖结果缓存。 |
| 109 | |
| 110 | 用于缓存子依赖的结果,以避免重复计算。 |
| 111 | """ |
| 112 | |
| 113 | def __init__(self): |
| 114 | self._state = CacheState.PENDING |
| 115 | self._result: Any = None |
| 116 | self._exception: BaseException | None = None |
| 117 | self._waiter = anyio.Event() |
| 118 | |
| 119 | def done(self) -> bool: |
| 120 | return self._state == CacheState.FINISHED |
| 121 | |
| 122 | def result(self) -> Any: |
| 123 | """获取子依赖结果""" |
| 124 | |
| 125 | if self._state != CacheState.FINISHED: |
| 126 | raise RuntimeError("Result is not ready") |
| 127 | |
| 128 | if self._exception is not None: |
| 129 | raise self._exception |
| 130 | return self._result |
| 131 | |
| 132 | def exception(self) -> BaseException | None: |
| 133 | """获取子依赖异常""" |
| 134 | |
| 135 | if self._state != CacheState.FINISHED: |
| 136 | raise RuntimeError("Result is not ready") |
| 137 | |
| 138 | return self._exception |
| 139 | |
| 140 | def set_result(self, result: Any) -> None: |
| 141 | """设置子依赖结果""" |
| 142 | |
| 143 | if self._state != CacheState.PENDING: |
| 144 | raise RuntimeError(f"Cache state invalid: {self._state}") |
| 145 | |
| 146 | self._result = result |
| 147 | self._state = CacheState.FINISHED |
| 148 | self._waiter.set() |
| 149 | |
| 150 | def set_exception(self, exception: BaseException) -> None: |
| 151 | """设置子依赖异常""" |
| 152 | |
| 153 | if self._state != CacheState.PENDING: |
| 154 | raise RuntimeError(f"Cache state invalid: {self._state}") |
| 155 | |
| 156 | self._exception = exception |
| 157 | self._state = CacheState.FINISHED |
| 158 | self._waiter.set() |
| 159 | |
| 160 | async def wait(self): |
| 161 | """等待子依赖结果""" |
| 162 | await self._waiter.wait() |
| 163 | if self._state != CacheState.FINISHED: |
| 164 | raise RuntimeError("Invalid cache state") |