Skip to content

asyncify ⚓︎

Asyncify

Modules:

  • aios

    aios = asyncio + os

  • core

    Asyncify core

Functions:

  • aiorun_anyio

    Run an async function or awaitable using anyio

  • aiterable

    Convert any-iterable to an async iterator

  • asyncify

    Makes a sync function async

  • await_or_return

    Return the result of an awaitable or return the object

  • is_async

    Return True if function/object is async/awaitable

  • run

    Run an async/awaitable function (Polyfill asyncio.run)

aiorun_anyio ⚓︎

aiorun_anyio(
    awaitable_or_func: Union[
        Awaitable[T_Retval],
        Callable[..., Coroutine[Any, Any, T_Retval]],
    ],
    *args: object,
    backend: str = "asyncio",
    backend_options: Optional[Dict[str, Any]] = None,
) -> T_Retval

Run an async function or awaitable using anyio

Parameters:

  • awaitable_or_func ⚓︎

    (Union[Awaitable[T_Retval], Callable[..., Coroutine[Any, Any, T_Retval]]]) –

    Function or awaitable to run

  • *args ⚓︎

    (object, default: () ) –

    args to pass to the function

  • backend ⚓︎

    (str, default: 'asyncio' ) –

    Backend to use for running the function

  • backend_options ⚓︎

    (Optional[Dict[str, Any]], default: None ) –

    Options to pass to the backend

Returns:

  • T_Retval ( T_Retval ) –

    Return value of the function

aiterable ⚓︎

aiterable(
    it: Union[Iterable[T], AsyncIterable[T]],
) -> AsyncIterator[T]

Convert any-iterable to an async iterator

Examples:

>>> from os import remove
>>> from asyncio import run
>>> plain_jane_list = list(range(10))
>>> async def consume_aiterable(it):
...     stuff = []
...     async for el in aiterable(it):
...         stuff.append(el)
...     return stuff
>>> run(consume_aiterable(plain_jane_list))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> async def async_gen():
...     for b in range(10):
...        yield b
>>> run(consume_aiterable(async_gen()))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> class AsyncIterable:
...     def __aiter__(self):
...         return async_gen()
>>> run(consume_aiterable(AsyncIterable()))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

asyncify ⚓︎

asyncify(
    funk: Callable[P, T],
    *,
    loop: Optional[AbstractEventLoop] = None,
    executor: Optional[Any] = None,
) -> Callable[P, Awaitable[T]]

Makes a sync function async

Parameters:

  • funk ⚓︎

    (Callable[P, T]) –

    Function to make into an async coroutine

  • loop ⚓︎

    (Optional[AbstractEventLoop], default: None ) –

    Event loop in which to run/execute

  • executor ⚓︎

    (Optional[Any], default: None ) –

    Executor to with which to execute

Returns:

  • Callable[P, Awaitable[T]]

    An asynchronous function

Examples:

>>> from asyncify import asyncify
>>> def add(a, b):
...     return a + b
>>> add(1, 5)
6
>>> @asyncify
... def add_async(a, b):
...     return a + b
>>> from asyncio import run
>>> run(add_async(1, 5))
6

await_or_return async ⚓︎

await_or_return(obj: Union[Awaitable[T], T]) -> T

Return the result of an awaitable or return the object

Examples:

>>> from asyncify import await_or_return, run
>>> def add(a, b): return a + b
>>> run(await_or_return(add(1, 4)))
5
>>> async def add_(a, b): return a + b
>>> run(await_or_return(add_(1, 4)))
5

is_async ⚓︎

is_async(obj: Any) -> bool

Return True if function/object is async/awaitable

Parameters:

  • obj ⚓︎

    (Any) –

    Object (probably a function) that could be async

Returns:

  • bool ( bool ) –

    True if the object is async/awaitable; False otherwise

Examples:

>>> from asyncify import is_async
>>> def add(a, b): return a + b
>>> is_async(add)
False
>>> async def add_(a, b): return a + b
>>> is_async(add_)
True

run ⚓︎

run(
    aw: Coroutine[Any, Any, T],
    *,
    debug: Optional[bool] = None,
    **kwargs: Any,
) -> T

Run an async/awaitable function (Polyfill asyncio.run)

Emulate asyncio.run() for snakes below python 3.7; asyncio.run was added in python3.7.

Parameters:

  • aw ⚓︎

    (Awaitable[T]) –

    Async/awaitable function to run

  • debug ⚓︎

    (Optional[bool], default: None ) –

    If True run event loop in debug mode

  • **kwargs ⚓︎

    (Any, default: {} ) –

    keyword arguments to be passed to the wrapped function

Returns:

  • T ( T ) –

    Return the result of running the async function

Examples:

>>> async def add(a, b):
...     return a + b
...
>>> from asyncify.core import run
>>> run(add(1, 4))
5