Forum: PC-Programmierung Python Timer


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!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.