Files
NeoBot/core/executor.py
2026-01-04 19:38:47 +08:00

28 lines
982 B
Python

"""
线程池执行器
提供一个全局的线程池和异步接口,用于在事件循环中安全地运行同步函数。
"""
import asyncio
from concurrent.futures import ThreadPoolExecutor
from functools import partial
from typing import Any, Callable
# 创建一个全局的线程池,可以根据需要调整 max_workers
executor = ThreadPoolExecutor(max_workers=10)
async def run_in_thread_pool(func: Callable[..., Any], *args: Any, **kwargs: Any) -> Any:
"""
在线程池中异步运行同步函数
:param func: 要运行的同步函数
:param args: 函数的位置参数
:param kwargs: 函数的关键字参数
:return: 函数的返回值
"""
loop = asyncio.get_running_loop()
# 使用 functools.partial 绑定函数和参数,以便传递给 run_in_executor
func_to_run = partial(func, *args, **kwargs)
# loop.run_in_executor 会返回一个 awaitable 对象
return await loop.run_in_executor(executor, func_to_run)