mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-09-05 07:27:15 +08:00
fix: 保持搜索线程任务的请求上下文 (#6451)
This commit is contained in:
@@ -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,并提供可重试的有界关闭合同。
|
||||
|
||||
Reference in New Issue
Block a user