Permalänk
Medlem

python - tidsstyrning

Hej.
Har just börjat titta på pyton. Är dock en sak jag inte lyckats förstå. Körs programmen igenom en gång och sedan är nöjt eller börjar det om när det kommit igenom?

Tänkte om man kunde få en viss sak att hända en viss tid eller måste man göra någon evighetsloop? Om jag t.ex. vill kunna få en påminnelse ett visst klockslag.

Permalänk
Medlem

Tror det saknas något grundläggande om hur datorer och algoritmer fungerar här.

All programkod körs igenom en gång, precis som en teaterpjäs, eller filmmanuskript. Så är programscript och programmering samma sak. Python är inte unikt där på något sätt. Vill man åstadkomma det där inom så måste man skriva tidshantering med sin kod/sitt program.

Däremot är de praxis att inte återuppfinna hjulet flera gånger eller komplicera till sina problem i onödan. De flesta/(alla!?) operativsystem har redan denna tidsfunktionalitet inbyggd. I Windows finns schemaläggaren. I linux crontab. etc. som anropar program eller script vissa tider.

Det som värderas högt idag är att kunna skriva kod som andra människor kan stå. Man får inga poäng av att skriva rappakalja som ingen annan än den som skrev det förstår, eller ens själv om 2 veckor. Tänk att programmering i de flesta fall är 98% av förstå andras kod, för att sedan spendera max 2% av tiden för att lägga till sin ändring/funktion utan att förstöra något i det stora hela.

Less is more

Permalänk
Medlem

Aha, då var det som jag misstänkte.
Programmerar Plc:er i vanliga fall och där loppas det på ett annat sätt.

Permalänk
Medlem
Skrivet av Sthlms_Jonas:

Hej.
Har just börjat titta på pyton. Är dock en sak jag inte lyckats förstå. Körs programmen igenom en gång och sedan är nöjt eller börjar det om när det kommit igenom?

Tänkte om man kunde få en viss sak att hända en viss tid eller måste man göra någon evighetsloop? Om jag t.ex. vill kunna få en påminnelse ett visst klockslag.

Om du inte kan lösa det med schemaläggaren och ändå vill köra ett pythonprogram så titta på modulen datetime, där har du funktionalitet för tidshantering.

Permalänk
Medlem

jo tack, där har jag varit och rotat:)
Fast förstod fortfarande inte om jag kunde få igång en sak en viss tid. nu handlar det inte om en påminnelse, var bara ett exempel.
jag får nog rota vidare och göra lite fler tester.

t.ex.
Om jag har en
variabel satt av mig ”2021-02-19 10:35:00”
kan jag få den att slå till när dagens tid blir lika utan att aktivera det själv på något sätt.

(vet att jag använder if-satser mm för att jämföra)

Permalänk
Medlem

Vad är det du vill ha gjort? Om du vill ha något gjort ett visst klockslag och programmet inte behöver göra något dessförinnan, skulle du kunna göra det enkelt för dig:

import datetime from time import sleep klockslag = datetime.datetime(2021, 2, 18, 15, 0, 0, 0) skillnad = klockslag - datetime.datetime.now() if skillnad.total_seconds() > 0: sleep(skillnad.total_seconds()) print("Nu är det dags att vakna!") else: print("För sent! Klockslaget har redan infallit.")

En annan möjlighet är att göra en loop med if-satser.

Permalänk
Medlem

Eller så kör du en tidsstyrd intervall.

import threading import datetime import time class Threading(object): """ Threading example class The run() method will be started and it will run in the background until the application exits. """ def __init__(self, interval=60): """ Constructor :type interval: int :param interval: Check interval, in seconds """ self.interval = interval thread = threading.Thread(target=self.run, args=()) thread.daemon = True # Daemonize thread thread.start() # Start the execution def run(self): """ Method that runs forever """ while True: ab = Checker().checkRefresh() if ab: print('res') time.sleep(self.interval) class Checker(): def __init__(self): self.checkRefresh= False run = Threading() def checkRefresh(self): your_time = datetime.datetime(2021, 2, 18, 15, 0, 0, 0) diff = your_time - datetime.datetime.now() if diff.total_seconds() > 0: return True

Permalänk
Medlem

Ta dig en titt på biblioteket scheduler: https://pypi.org/project/schedule/

Det är inte så kraftfullt, men är rätt enkelt att sätta upp.