fix: 保持搜索线程任务的请求上下文 (#6451)

This commit is contained in:
InfinityPacer
2026-08-25 16:06:17 +08:00
committed by GitHub
parent d58c8d2b17
commit f3622de82e
7 changed files with 197 additions and 10 deletions
+18 -2
View File
@@ -2,8 +2,8 @@ import asyncio
import inspect
import threading
import time
from concurrent.futures import Future, ThreadPoolExecutor, wait
from contextvars import copy_context
from concurrent.futures import Executor, Future, ThreadPoolExecutor, wait
from contextvars import Context, copy_context
from functools import partial, wraps
from typing import Any, Callable, TypeVar, cast
@@ -15,6 +15,22 @@ TaskResult = TypeVar("TaskResult")
ExecutorResult = TypeVar("ExecutorResult")
def submit_with_context(
executor: Executor,
func: Callable[..., ExecutorResult],
/,
*args: Any,
**kwargs: Any,
) -> Future[ExecutorResult]:
"""从空线程上下文提交任务,并在执行时恢复调用方的独立上下文快照。"""
context = copy_context()
def submit() -> Future[ExecutorResult]:
return executor.submit(context.run, func, *args, **kwargs)
return Context().run(submit)
class OwnedThreadPoolExecutor(ThreadPoolExecutor):
"""
追踪已接受 Future,并提供可重试的有界关闭合同。