from collections.abc import Callable, Coroutine from functools import partial from typing import Any import anyio.from_thread import anyio.to_thread def run_sync[T, **P]( func: Callable[P, Coroutine[Any, Any, T]], /, *args: P.args, **kwargs: P.kwargs ) -> T: return anyio.from_thread.run(partial(func, *args, **kwargs)) async def run_async[T, **P]( func: Callable[P, T], /, *args: P.args, **kwargs: P.kwargs ) -> T: return await anyio.to_thread.run_sync(partial(func, *args, **kwargs))