Ich habe mit der Idee gespielt, time.sleep(n)
in einem Python-Skript zu verwenden, damit es Jobs in verschiedenen Intervallen ausführt. Der Pseudocode würde wie folgt aussehen:
Kurz gesagt, das Programm schläft, bis der nächste Job ausgeführt werden muss. Er führt den Job aus, sucht den nächsten auszuführenden Job und schläft, bis der nächste Job ausgeführt werden muss (fährt bis ins Unendliche fort). Ich plane, dies auf einem Linux-Rechner auszuführen - die Verwendung eines Cron-Jobs ist eine Möglichkeit. Hat jemand Meinungen zu beiden?
Nein, es ist nicht CPU-intensiv.
Die Dokumentation lautet:
Unterbrechen Sie die Ausführung für die angegebene Anzahl von Sekunden.
Python kann nicht wirklich garantieren, dass bei jeder möglichen Implementierung das Betriebssystem Ihren Prozess während eines Schlafs niemals planen wird. Aber auf jeder Plattform versucht Python, etwas angemessenes zu tun, um für die angegebene Zeit zu blockieren, ohne irgendeine CPU zu verwenden. Auf einigen Plattformen mag das noch ein bisschen CPU bedeuten, aber es wird so wenig wie möglich sein.
Insbesondere, da Sie nach Linux und vermutlich CPython gefragt haben:
Unter Linux und den meisten anderen POSIX-Plattformen wird normalerweise select
verwendet. Siehe die 3.3 Quelle .
Die man-Seite macht es ziemlich klar, dass select
bis zum Signal, Timeout oder Ready / O (und in diesem Fall gibt es keine fds, also ist letzteres unmöglich).
Sie können die Kernel-Quelle für alle Details lesen, aber im Grunde, wenn keine unerwarteten Signale vorliegen, werden Sie überhaupt nicht eingeplant, außer vielleicht eine kleine Menge von Spinnerei zu Beginn von select
(wie eine Optimierung für die Fälle, in denen select
fast sofort zurückkehren kann.
In der Mitte Ihrer Zusammenfassung ändert sich die Frage von "ist sleep
CPU-intensiv" zu "Soll ich sleep
oder einen Cron-Job verwenden?"
Wie auch immer, Sie brennen keine CPU, während Sie warten. Es gibt einige Vor-und Nachteile, aber die meisten von ihnen sind trivial. Von (grob und subjektiv) am wichtigsten bis mindestens, ein Cron Job:
Nein, es ist nicht prozessorintensiv. Es lässt den Prozessor im Leerlauf.
Laut der Dokumentation wird die Ausführung ausgesetzt, was bedeutet, dass dies nicht der Fall ist Prozessorintensiv. Ein beschäftigtes Warten wäre prozessorintensiv.