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)


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)


Lesenswert?

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

von Kaj (Gast)


Lesenswert?

Auf die schnelle, wuerde ich das von Hand in etwa so machen. Nicht 
schoen, aber selten:
1
#!/usr/bin/env python
2
3
import datetime
4
import threading
5
6
7
def do_your_work():
8
    # do your work
9
    pass
10
11
12
def get_time_as_str():
13
    time = datetime.datetime.now()
14
    return str(time)[11:16]
15
16
17
def is_it_time_to_end(deadline):
18
    if get_time_as_str() == deadline:
19
        return True
20
    else:
21
        return False
22
23
24
def main():
25
    start = "08:00"
26
    end = "08:15"
27
28
    start_triggerd = False
29
30
    timer = threading.Event()
31
32
    while True:
33
        if start_triggerd is False and get_time_as_str() == start:
34
            start_triggerd = True
35
        else:
36
            print(get_time_as_str())
37
            timer.wait(60.0)
38
            continue
39
40
        while is_it_time_to_end(end) is False:
41
            do_your_work()
42
43
        start_triggerd = False
44
45
46
if __name__ == '__main__':
47
    main()

Das Zeitmanagement beim Warten koennte man verbessern.

von Kaj (Gast)


Lesenswert?

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

von Kaj (Gast)


Lesenswert?

Ich habs nochmal ueberarbeteitet.
1
#!/usr/bin/env python
2
3
import datetime
4
import threading
5
6
7
def do_your_work():
8
    # do your work
9
    pass
10
11
12
def get_time_as_num():
13
    time = datetime.datetime.now()              # -> 2019-01-12 11:09:33.033172
14
    time = str(time)[11:13] + str(time)[14:16]  # 2019-01-12 11:09:33.033172 -> 11:09 -> 1109
15
    return int(time)
16
17
18
def main():
19
    start = 800    # 08:00 Uhr
20
    end = 815      # 08:15 Uhr
21
22
    timer = threading.Event()
23
24
    while True:
25
        time = get_time_as_num()
26
        if time >= start and time <= end:
27
            while get_time_as_num() < end:
28
                do_your_work()
29
30
        timer.wait(59.0)
31
32
33
if __name__ == '__main__':
34
    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)


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]
  • [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.