sched — Schemaläggare för händelser

Källkod: Lib/sched.py


Modulen sched definierar en klass som implementerar en schemaläggare för händelser för allmänt bruk:

class sched.scheduler(timefunc=time.monotonic, delayfunc=time.sleep)

Klassen scheduler definierar ett generiskt gränssnitt för schemaläggning av händelser. Den behöver två funktioner för att faktiskt hantera ”omvärlden” — timefunc skall kunna anropas utan argument och returnera ett tal (”tiden”, i valfri enhet). Funktionen delayfunc skall kunna anropas med ett argument, kompatibelt med resultatet från timefunc, och skall fördröja så många tidsenheter. delayfunc kommer också att anropas med argumentet 0 efter att varje händelse har körts för att ge andra trådar en möjlighet att köra i flertrådade applikationer.

Ändrad i version 3.3: parametrarna timefunc och delayfunc är valfria.

Ändrad i version 3.3: scheduler-klassen kan användas säkert i flertrådade miljöer.

Exempel:

>>> import sched, time
>>> s = sched.scheduler(time.time, time.sleep)
>>> def print_time(a='default'):
...     print("From print_time", time.time(), a)
...
>>> def print_some_times():
...     print(time.time())
...     s.enter(10, 1, print_time)
...     s.enter(5, 2, print_time, argument=('positional',))
...     # despite having higher priority, 'keyword' runs after 'positional' as enter() is relative
...     s.enter(5, 1, print_time, kwargs={'a': 'keyword'})
...     s.enterabs(1_650_000_000, 10, print_time, argument=("first enterabs",))
...     s.enterabs(1_650_000_000, 5, print_time, argument=("second enterabs",))
...     s.run()
...     print(time.time())
...
>>> print_some_times()
1652342830.3640375
From print_time 1652342830.3642538 second enterabs
From print_time 1652342830.3643398 first enterabs
From print_time 1652342835.3694863 positional
From print_time 1652342835.3696074 keyword
From print_time 1652342840.369612 default
1652342840.3697174

Schemaläggningsobjekt

scheduler-instanser har följande metoder och attribut:

scheduler.enterabs(time, priority, action, argument=(), kwargs={})

Schemalägg en ny händelse. Argumentet time bör vara en numerisk typ som är kompatibel med returvärdet för funktionen timefunc som skickas till konstruktören. Händelser som schemalagts för samma tid kommer att utföras i den ordning som deras prioritet anger. En lägre siffra representerar en högre prioritet.

Att utföra händelsen innebär att utföra action(*argument, **kwargs). argument är en sekvens som innehåller de positionella argumenten för action. kwargs är en ordbok som innehåller nyckelordsargumenten för action.

Returvärdet är en händelse som kan användas för senare annullering av händelsen (se cancel()).

Ändrad i version 3.3: argument-parametern är valfri.

Ändrad i version 3.3: parametern kwargs har lagts till.

scheduler.enter(delay, priority, action, argument=(), kwargs={})

Schemalägg en händelse för fördröjning fler tidsenheter. Förutom den relativa tiden är de andra argumenten, effekten och returvärdet desamma som för enterabs().

Ändrad i version 3.3: argument-parametern är valfri.

Ändrad i version 3.3: parametern kwargs har lagts till.

scheduler.cancel(event)

Tar bort händelsen från kön. Om event inte är en händelse som för närvarande finns i kön, kommer denna metod att ge upphov till ett ValueError.

scheduler.empty()

Returnerar True om händelsekön är tom.

scheduler.run(blocking=True)

Kör alla schemalagda händelser. Den här metoden väntar (med hjälp av funktionen delayfunc som skickas till konstruktören) på nästa händelse och kör den sedan och så vidare tills det inte finns några fler schemalagda händelser.

Om blocking är false körs de schemalagda händelser som löper ut tidigast (om sådana finns) och returnerar sedan tidsfristen för nästa schemalagda anrop i schemaläggaren (om sådan finns).

Antingen action eller delayfunc kan ge upphov till ett undantag. I båda fallen kommer schemaläggaren att upprätthålla ett konsekvent tillstånd och sprida undantaget. Om ett undantag utlöses av action kommer händelsen inte att prövas i framtida anrop till run().

Om en sekvens av händelser tar längre tid att köra än den tid som finns tillgänglig före nästa händelse, kommer schemaläggaren helt enkelt att hamna på efterkälken. Inga händelser kommer att avbrytas; den anropande koden är ansvarig för att avbryta händelser som inte längre är relevanta.

Ändrad i version 3.3: parametern blocking har lagts till.

scheduler.queue

Skrivskyddat attribut som returnerar en lista över kommande händelser i den ordning de kommer att köras. Varje händelse visas som en named tuple med följande fält: tid, prioritet, åtgärd, argument, kwargs.