def run(func: Callable[..., T_Retval], *args, debug: bool = False, use_uvloop: bool = True, policy: Optional[asyncio.AbstractEventLoopPolicy] = None) -> T_Retval: async def wrapper(): nonlocal exception, retval try: retval = await func(*args) except BaseException as exc: exception = exc # On CPython, use uvloop when possible if no other policy has been given and if not explicitly # disabled if policy is None and use_uvloop and sys.implementation.name == 'cpython': try: import uvloop except ImportError: pass else: policy = uvloop.EventLoopPolicy() if policy is not None: asyncio.set_event_loop_policy(policy) exception = retval = None native_run(wrapper(), debug=debug) if exception is not None: raise exception else: return cast(T_Retval, retval)
def run(func: Callable[..., T_Retval], *args, debug: bool = False, policy: Optional[asyncio.AbstractEventLoopPolicy] = None) -> T_Retval: async def wrapper(): nonlocal exception, retval try: retval = await func(*args) except BaseException as exc: exception = exc if policy is not None: asyncio.set_event_loop_policy(policy) exception = retval = None native_run(wrapper(), debug=debug) if exception is not None: raise exception else: return retval
def run(func: Callable[..., T_Retval], *args, debug: bool = False, use_uvloop: bool = True, policy: Optional[asyncio.AbstractEventLoopPolicy] = None) -> T_Retval: @wraps(func) async def wrapper(): task = current_task() task_state = TaskState(None, get_callable_name(func), None) _task_states[task] = task_state if _native_task_names: task.set_name(task_state.name) try: return await func(*args) finally: del _task_states[task] _maybe_set_event_loop_policy(policy, use_uvloop) return native_run(wrapper(), debug=debug)