Python scheduler egész óra

Üdv!
Azt szeretném python3-ban megoldani, hogy ha elindul a script, akkor várjon a legközelebbi egész óráig (00 percig).
Ezt mivel lehet megoldani elegánsan?
Próbálkoztam a time csomaggal:

import time

starttime=time.time()
print(starttime)
# time.sleep(3600.0 - ((time.time() - starttime) % 3600.0)) <--- ide kellene a megfelelő sleep

Hozzászólások

Nem értek a kígyókhoz, de az biztos, hogy modulo-t float operandussal kell számolni? Azért kérdem, mert ez épp egy olyan művelet, amelynek egész számokon van értelme.

Ami a tartalmát illeti, szerintem nem kell a start time. Most valamennyi az idő, s 3600-ból kivonod a pillanatnyi idő mod 3600-at, akkor kapod meg, hogy mennyi idő van még a következő egész óráig. Esetleg, ha épp 3600 az eredmény, akkor kihagyhatod az időzítést, mert pont egész óra van.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

A CRON miért nem jó erre? Beállítod, hogy minden egész órában fusson le a Python script.

Bár OS-ről nem volt szó én Linuxban gondolkodtam. A Linux pedig ezeket tökéletesen megoldja. Nem derül ki miért akarsz saját ütemezőt, miért nem jók a meglévő megoldások. Azért írom így, mert sokszor találkoztam azzal, hogy a fejlesztők amikor kell valami lefejleszti magának ahelyett, hogy használná a meglévő és valljuk be jól bevált és kiforrott megoldásokat. Egy frissen fejlesztett ütemezőnél mindig nagyobb az esélye egy-egy rejtett hibának például.
A fenti tapasztalatim alapján azt mondanám, hogy a Python kód beillesztene egy JOB-ot mondjuk az AT parancsba ha egyszer kell futni és ha periodikusan kell akkor ott a CRON.

Ha nem kell normális scheduler, akkor akár egy ilyesmi is elég lehet:


from threading import Timer
from datetime import datetime, timedelta


def on_sched():
    print('Running at', datetime.now())


target_time = datetime.now().replace(minute=0, second=0, microsecond=0) + timedelta(hours=1)
Timer((target_time - datetime.now()).total_seconds(), on_sched).start()

"megoldani elegánsan"
Szerintem ne egy időintervallumot várj, hanem regisztrálj be valamit, hogy egy adott időpontban fusson a dolog.
Mi van ha átállítják az órát?

Én úgy indulnék el, hogy indításkor megkeresem a következő egész órát, pl.:
/szerk.: a pandas példa nem jó, helyette itt van egy jó round up megoldás:
https://stackoverflow.com/questions/48107644/rounding-datetime-to-the-n…

Majd a legegyszerűbben talán a schedule konyvtarral lefuttatod a fent megkapott időn: https://pypi.python.org/pypi/schedule

Ha ismert lenne a teljes igény, lehet tudnék jobb megoldást is.

-------------------------
Roses are red
Violets are blue
Unexpected '}' on line 32

Köszönöm mindenkinek, de ahogy korábbi a hozzászólásban jeleztem, ez működik (thanx locsemege!):

# print(datetime.datetime.now())
starttime=time.time()
timetowait=3600-(starttime%3600)
time.sleep( timetowait )

A lényeg az volt, hogy egész órában szeretném a futást kezdeni, utána pedig a schedule csomaggal/modullal már tudom ütemezni a job-okat.