GitHub

AsyncioScheduler

API reference for AsyncioScheduler.

Runs tasks on an asyncio event loop, batching them per loop tick.

Functions

__init__

__init__(loop) -> None
ParameterTypeDescription
loopasyncio.AbstractEventLoop
def __init__(self, loop: asyncio.AbstractEventLoop) -> None:
    super().__init__()
    self._loop = loop
    self._thread = threading.get_ident()
    self._ready: deque[Task] = deque()
    self._draining_scheduled = False

current

current() -> AsyncioScheduler

The scheduler for the running loop. Must be called on the loop.

Returns AsyncioScheduler

@classmethod
def current(cls) -> AsyncioScheduler:
    """The scheduler for the running loop. Must be called on the loop."""
    return cls(asyncio.get_running_loop())

schedule

schedule(task) -> None
ParameterTypeDescription
taskTask
def schedule(self, task: Task) -> None:
    if threading.get_ident() != self._thread:
        self._loop.call_soon_threadsafe(self.schedule, task)
        return
    self._ready.append(self._tracked(task))
    self._drain_soon()

call_later

call_later(delay, task, *, daemon=False) -> Cancel
ParameterTypeDescription
delaySeconds
taskTask
daemonbool = False

Returns Cancel

def call_later(self, delay: Seconds, task: Task, *, daemon: bool = False) -> Cancel:
    return self._loop.call_later(max(delay, 0.0), task).cancel

track

track(tracker, f) -> None

Run f, counting what it schedules against tracker.

ParameterTypeDescription
trackerWakeTracker
fCallable[[], None]
def track(self, tracker: WakeTracker, f: Callable[[], None]) -> None:
    """Run ``f``, counting what it schedules against ``tracker``."""
    previous = self._tracking.tracker
    self._tracking.tracker = tracker
    try:
        f()
    finally:
        self._tracking.tracker = previous