Forum: PC-Programmierung Python Timer


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Rüdiger (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ich versuche in Python einen Timer zu definieren. Täglich um 8:00 
morgens soll eine Funktion gestartet werden und um 8:15 wieder beendet. 
IRgendwie komme ich mit der time library nicht klar. Kann mir jemand 
helfen?

von Peng (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Kling fuer mich nach einem Job fuer 
https://pypi.org/project/python-crontab/

von Kaj (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Auf die schnelle, wuerde ich das von Hand in etwa so machen. Nicht 
schoen, aber selten:
#!/usr/bin/env python

import datetime
import threading


def do_your_work():
    # do your work
    pass


def get_time_as_str():
    time = datetime.datetime.now()
    return str(time)[11:16]


def is_it_time_to_end(deadline):
    if get_time_as_str() == deadline:
        return True
    else:
        return False


def main():
    start = "08:00"
    end = "08:15"

    start_triggerd = False

    timer = threading.Event()

    while True:
        if start_triggerd is False and get_time_as_str() == start:
            start_triggerd = True
        else:
            print(get_time_as_str())
            timer.wait(60.0)
            continue

        while is_it_time_to_end(end) is False:
            do_your_work()

        start_triggerd = False


if __name__ == '__main__':
    main()

Das Zeitmanagement beim Warten koennte man verbessern.

von Kaj (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Das
print(get_time_as_str())
 im else-Teil gehoert da natuerlich nicht rein. War nur zu testzwecken 
-.-

von Kaj (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ich habs nochmal ueberarbeteitet.
#!/usr/bin/env python

import datetime
import threading


def do_your_work():
    # do your work
    pass


def get_time_as_num():
    time = datetime.datetime.now()              # -> 2019-01-12 11:09:33.033172
    time = str(time)[11:13] + str(time)[14:16]  # 2019-01-12 11:09:33.033172 -> 11:09 -> 1109
    return int(time)


def main():
    start = 800    # 08:00 Uhr
    end = 815      # 08:15 Uhr

    timer = threading.Event()

    while True:
        time = get_time_as_num()
        if time >= start and time <= end:
            while get_time_as_num() < end:
                do_your_work()

        timer.wait(59.0)


if __name__ == '__main__':
    main()

Ist noch immer nicht schoen, und das Zeitmanagement kann man immernoch 
verbessern. Aber fuer auf die schnelle am Morgen.

Gruesse

von Rüdiger (Gast)


Bewertung
0 lesenswert
nicht lesenswert
@Kaj

sorry bin erst jetzt wieder dazu gekommen. Hab deine Variante versucht, 
hat auf Anhieb geklappt. VIelen Dank für die Mühe!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.