import asyncio from asyncio import Future from typing import Coroutine, Any, List, Set, TypeVar Result = TypeVar("Result") async def await_all(tasks: List[Coroutine[Any, Any, Result]]) -> List[Result]: results: Set[Future[Result]] results, pending = await asyncio.wait(tasks) return list(map(lambda r: r.result(), results)) def fire_and_forget(f): loop = asyncio.get_event_loop() future = asyncio.ensure_future(f) loop.run_until_complete(future) async def safe_gather(tasks: List[Coroutine], default: Any = None): response = list(await asyncio.gather(*tasks, return_exceptions=True)) return [default if isinstance(i, BaseException) else i for i in response] async def immediate_task(result): return result