Seite 1 von 1

Loops kombinieren

Verfasst: Sonntag 20. Oktober 2019, 08:51
von reini910
Hallo miteinander,

beim Schreiben meines kleinen Skriptes zur Automatisierung von einigen Aufgaben bin ich auf ein kleines Problem gestoßen.

Ich habe einen Loop für 25 Wiederholungen wie folgt eingesetzt:

Code: Alles auswählen

    for i in range(25):
        #Programmteil 1
    #Programmteil 2
    
Ab und an kommt es allerdings zu Problemen bei der automatisierten Sache, sodass das Skript die 25 Wiederholungen nicht ausführen kann und damit Programmteil 2 nicht gestartet wird.

Deshalb würde ich den Loop mit den 25 Wiederholungen gern mit einem anderen verknüpfen, der nach spätestens 1 Stunde ausgelöst wird.

Bedeutet: Das Skript versucht erst die 25 Wiederholungen durchzuführen, wenn das aber nicht innerhalb von 1 Stunde passiert, wird dennoch Programmteil 2 gestartet.

Ich hoffe ich konnte mein Problem genau genug beschreiben und hoffe, dass mir jemand dabei helfen kann.

In jedem Fall einen schönen Sonntag

Viele Grüße
reini

Re: Loops kombinieren

Verfasst: Sonntag 20. Oktober 2019, 09:32
von __blackjack__
@reini910: Man könnte an einer passenden Stelle in der ``for``-Schleife schauen ob bereits eine Stunde vergangen ist, und die Schleife dann abbrechen:

Code: Alles auswählen

#!/usr/bin/env python3
from datetime import datetime as DateTime, timedelta as TimeDelta
import logging


def main():
    ...
    start_time = DateTime.now()
    for _ in range(25):
        elapsed_time = DateTime.now() - start_time
        if elapsed_time >= TimeDelta(hours=1):
            logging.info("Breche Programmteil 1 nach %s ab.", elapsed_time)
            break

        # Programmteil 1
        ...
    else:
        logging.info("Programmteil 1 komplett durchlaufen.")

    # Programmteil 2
    ...


if __name__ == "__main__":
    main()

Re: Loops kombinieren

Verfasst: Sonntag 20. Oktober 2019, 09:47
von Sirius3
@reini910: man müsste schon genauer wissen, was in der Schleife passiert und warum sie hängen bleibt. Denn davon hängt es ab, wie man einen Timeout integrieren könnte.