perf(chain): review 节点并行扇出五审——复用主图 add-only 记账并发范式(CR-M3-6)
This commit is contained in:
@@ -10,6 +10,7 @@ checkpoint 只存控制流,正文/审稿落领域表——resume 时重读领
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import asyncio
|
||||
import uuid
|
||||
from collections.abc import Awaitable, Callable, Sequence
|
||||
from contextlib import AbstractAsyncContextManager
|
||||
@@ -210,9 +211,15 @@ async def review_chapter(
|
||||
"user_id": user_id,
|
||||
"review_context": review_context,
|
||||
}
|
||||
# 并行扇出五审(复用主图 write→review 的 add-only 记账并发范式,T3.8):各 run_review
|
||||
# 共用本节点 session 的网关,其 SqlAlchemyLedgerSink.record 只 add(同步、不 flush),故
|
||||
# 共享 session 并发安全;run_review 自带失败隔离(不抛、返回 incomplete 占位),gather
|
||||
# 无需 return_exceptions。collect_reviews 在 gather 之后**一次**落库(不引入新并发写)。
|
||||
parts = await asyncio.gather(
|
||||
*(run_review(spec, review_state, gateway=gateway) for spec in review_specs)
|
||||
)
|
||||
reviews: dict[str, Any] = {}
|
||||
for spec in review_specs:
|
||||
part = await run_review(spec, review_state, gateway=gateway)
|
||||
for part in parts:
|
||||
reviews.update(part.get("reviews", {}))
|
||||
review_state["reviews"] = reviews
|
||||
review_repo = review_repo_factory(session)
|
||||
|
||||
Reference in New Issue
Block a user