feat: 添加 Session 亲和路由支持(NewSession / WithAffinity)

- 新增 NewSession(pool):返回固定到同一 worker 进程的 Pool 视图
- 新增 WithAffinity(ctx, key):相同 key 通过 FNV hash 稳定路由到同一 worker
- pool.acquire 支持亲和路由,无亲和时保持轮询
- example 添加 Session / WithAffinity / 全局变量共享三组演示
This commit is contained in:
2026-05-08 11:21:02 +08:00
parent 30004e44ee
commit cda662e874
5 changed files with 209 additions and 1 deletions

View File

@@ -143,6 +143,45 @@ def get_user_via_go(uid: int) -> dict:
return dataclasses.asdict(user)
# ── Session 亲和示例 ──────────────────────────────────────────────────────────
# _sessions 保存每个 session 的状态key 由调用方提供
_sessions: dict = {}
# _global_counter 是进程级全局变量,同一 worker 的所有 session 共享
_global_counter: int = 0
@expose
def global_increment(delta: int) -> str:
global _global_counter
_global_counter += delta
return f"[worker {worker_id}] counter = {_global_counter}"
@expose
def global_get() -> str:
return f"[worker {worker_id}] counter = {_global_counter}"
@expose
def session_init(session_id: str, value: int) -> str:
_sessions[session_id] = {"value": value, "steps": []}
return f"[worker {worker_id}] session {session_id} init with {value}"
@expose
def session_step(session_id: str, delta: int) -> int:
s = _sessions[session_id]
s["value"] += delta
s["steps"].append(delta)
return s["value"]
@expose
def session_result(session_id: str) -> dict:
return _sessions.pop(session_id)
if __name__ == "__main__":
run()
print("worker_id", worker_id)