portage.util.futures._asyncio package

Submodules

Module contents

class portage.util.futures._asyncio.Task(coro, loop=None)

Bases: _asyncio.Future

Schedule the execution of a coroutine: wrap it in a future. A task is a subclass of Future.

_asyncio_future_blocking
_callbacks
_cancel_message
_exception
_log_traceback
_loop
_make_cancelled_error()

Create the CancelledError to raise if the Future is cancelled.

This should only be called once when handling a cancellation since it erases the context exception value.

_repr_info()
_result
_source_traceback
_state
add_done_callback()

Add a callback to be run when the future becomes done.

The callback is called with a single argument - the future object. If the future is already done when this is called, the callback is scheduled with call_soon.

cancel(msg=None)

Cancel the future and schedule callbacks.

If the future is already done or cancelled, return False. Otherwise, change the future’s state to cancelled, schedule the callbacks and return True.

cancelled()

Return True if the future was cancelled.

done()

Return True if the future is done.

Done means either that a result / exception are available, or that the future was cancelled.

exception()

Return the exception that was set on this future.

The exception (or None if no exception was set) is returned only if the future is done. If the future has been cancelled, raises CancelledError. If the future isn’t done yet, raises InvalidStateError.

get_loop()

Return the event loop the Future is bound to.

remove_done_callback(fn, /)

Remove all instances of a callback from the “call when done” list.

Returns the number of callbacks removed.

result()

Return the result this future represents.

If the future has been cancelled, raises CancelledError. If the future’s result isn’t yet available, raises InvalidStateError. If the future is done and has an exception set, this exception is raised.

set_exception(exception, /)

Mark the future done and set an exception.

If the future is already done when this method is called, raises InvalidStateError.

set_result(result, /)

Mark the future done and set its result.

If the future is already done when this method is called, raises InvalidStateError.

portage.util.futures._asyncio._get_running_loop()
portage.util.futures._asyncio._safe_loop()

Return an event loop that’s safe to use within the current context. For portage internal callers or external API consumers calling from the main thread, this returns a globally shared event loop instance.

For external API consumers calling from a non-main thread, an asyncio loop must be registered for the current thread, or else the asyncio.get_event_loop() function will raise an error like this:

RuntimeError: There is no current event loop in thread ‘Thread-1’.

In order to avoid this RuntimeError, a loop will be automatically created like this:

asyncio.set_event_loop(asyncio.new_event_loop())

In order to avoid a ResourceWarning, automatically created loops are added to a WeakValueDictionary, and closed via an atexit hook if they still exist during exit for the current pid.

Return type

asyncio.AbstractEventLoop (or compatible)

Returns

event loop instance

portage.util.futures._asyncio._thread_weakrefs_atexit()
portage.util.futures._asyncio._wrap_loop(loop=None)

In order to deal with asyncio event loop compatibility issues, use this function to wrap the loop parameter for functions that support it. For example, since python3.4 does not have the AbstractEventLoop.create_future() method, this helper function can be used to add a wrapper that implements the create_future method for python3.4.

Parameters

loop (asyncio.AbstractEventLoop (or compatible)) – event loop

Return type

asyncio.AbstractEventLoop (or compatible)

Returns

event loop

portage.util.futures._asyncio.create_subprocess_exec(*args, **kwargs)

Create a subprocess.

Parameters
  • args (str) – program and arguments

  • stdin (file or int) – stdin file descriptor

  • stdout (file or int) – stdout file descriptor

  • stderr (file or int) – stderr file descriptor

  • close_fds (bool) – close file descriptors

  • loop (event loop) – asyncio.AbstractEventLoop (or compatible)

  • kwargs (varies) – subprocess.Popen parameters

Return type

asyncio.subprocess.Process (or compatible)

Returns

asyncio.subprocess.Process interface

portage.util.futures._asyncio.ensure_future(coro_or_future, loop=None)

Wrap a coroutine or an awaitable in a future.

If the argument is a Future, it is returned directly.

Parameters
  • coro_or_future (coroutine or Future) – coroutine or future to wrap

  • loop (asyncio.AbstractEventLoop (or compatible)) – event loop

Return type

asyncio.Future (or compatible)

Returns

an instance of Future

portage.util.futures._asyncio.get_child_watcher()

Equivalent to calling get_event_loop_policy().get_child_watcher().

portage.util.futures._asyncio.get_event_loop()

Equivalent to calling get_event_loop_policy().get_event_loop().

Return type

asyncio.AbstractEventLoop (or compatible)

Returns

the event loop for the current context

portage.util.futures._asyncio.get_event_loop_policy()

Get the current event loop policy.

Return type

asyncio.AbstractEventLoopPolicy (or compatible)

Returns

the current event loop policy

portage.util.futures._asyncio.iscoroutinefunction(func)

Return True if func is a decorated coroutine function, supporting both asyncio.coroutine and compat_coroutine since their behavior is identical for all practical purposes.

portage.util.futures._asyncio.set_child_watcher(watcher)

Equivalent to calling get_event_loop_policy().set_child_watcher(watcher).

portage.util.futures._asyncio.set_event_loop_policy(policy)

Set the current event loop policy. If policy is None, the default policy is restored.

Parameters

policy (asyncio.AbstractEventLoopPolicy or None) – new event loop policy

portage.util.futures._asyncio.sleep(delay, result=None, loop=None)

Create a future that completes after a given time (in seconds). If result is provided, it is produced to the caller when the future completes.

Parameters
  • delay (int or float) – delay seconds

  • result (object) – result of the future

  • loop (asyncio.AbstractEventLoop (or compatible)) – event loop

Return type

asyncio.Future (or compatible)

Returns

an instance of Future

portage.util.futures._asyncio.wait(futures, loop=None, timeout=None, return_when='ALL_COMPLETED')

Wraps asyncio.wait() and omits the loop argument which is not supported since python 3.10.