GitHub

PoolWaiters

API reference for PoolWaiters.

The waiters in arrival order.

Functions

__init__

__init__() -> None
def __init__(self) -> None:
    self._line: dict[Waiter, None] = {}

park

park(waiter, resume) -> None

Sleep until woken. A waiter already in line keeps its place.

ParameterTypeDescription
waiterWaiter
resumeResume
def park(self, waiter: Waiter, resume: Resume) -> None:
    """Sleep until woken. A waiter already in line keeps its place."""
    waiter.resume = resume
    self._line[waiter] = None

cancel

cancel(waiter) -> None

The waiter was interrupted. Asleep, it leaves at once, so no wake is spent on it; once woken, it stays until it passes the wake on.

ParameterTypeDescription
waiterWaiter
def cancel(self, waiter: Waiter) -> None:
    """The waiter was interrupted. Asleep, it leaves at once, so no wake
    is spent on it; once woken, it stays until it passes the wake on."""
    if waiter.is_sleeping:
        waiter.resume = None
        del self._line[waiter]

leave

leave(waiter) -> bool

Take waiter out of line; whether it was in it.

ParameterTypeDescription
waiterWaiter

Returns bool

def leave(self, waiter: Waiter) -> bool:
    """Take ``waiter`` out of line; whether it was in it."""
    if waiter not in self._line:
        return False
    del self._line[waiter]
    return True

first_sleeping

first_sleeping() -> Waiter | None

Returns Waiter | None

def first_sleeping(self) -> Waiter | None:
    return next((w for w in self._line if w.is_sleeping), None)

wake

wake(scheduler, count, available) -> None

Wake up to count sleeping waiters, in order, while available() holds.

ParameterTypeDescription
schedulerScheduler
countint
availableCallable[[], bool]
def wake(self, scheduler: Scheduler, count: int, available: Callable[[], bool]) -> None:
    """Wake up to ``count`` sleeping waiters, in order, while
    ``available()`` holds."""
    if not self._line:
        return

    def wake(remaining: int) -> None:
        waiter = self.first_sleeping() if available() else None
        if waiter is None:
            return
        waiter()
        if remaining > 1:
            scheduler.schedule(lambda: wake(remaining - 1))

    scheduler.schedule(lambda: wake(count))

wake_all

wake_all(scheduler) -> None

Wake everyone in line now to retry.

ParameterTypeDescription
schedulerScheduler
def wake_all(self, scheduler: Scheduler) -> None:
    """Wake everyone in line now to retry."""
    waiters = list(self._line)
    if not waiters:
        return

    def wake(index: int) -> None:
        waiters[index]()
        if index + 1 < len(waiters):
            scheduler.schedule(lambda: wake(index + 1))

    scheduler.schedule(lambda: wake(0))

release_all

release_all() -> None

Empty the line, waking everyone at once (the pool shuts down).

def release_all(self) -> None:
    """Empty the line, waking everyone at once (the pool shuts down)."""
    waiters = list(self._line)
    self._line.clear()
    for waiter in waiters:
        waiter()