Zeitbegrenzung Funktionsausführung in PHP oder irgendetwas anderes

8

Ich könnte sagen, dass meine Frage mit PHP zusammenhängt, aber was mich mehr beschäftigt, ist die richtige Logik des Programmierens in Situationen, in denen die Ausführung von Funktionen unendlich lange dauern kann.

Was ist der richtige Weg, um die Zeit zu überwachen, die benötigt wird, um eine Funktion auszuführen und um diese Ausführung zu stoppen und mit dem Rest des Programms fortzufahren?

OK, ich weiß, dass es zum Beispiel eine set_time_limit () -Funktion gibt, die einen fatalen Fehler zurückgibt, aber ich möchte das nicht. Ich möchte, dass mein Code nach x Sekunden fortfährt, oder vielleicht nach einer Zeitüberschreitung eine Ausnahme auslöst es und etwas anderes tun?

Schreiben Sie eine Art "Watchdog" Funktionslösung und wie wird das gemacht?

Wir danken Ihnen für die Hilfe, die Sie zur Verfügung stellen können, für jeden Link, für jeden Artikel, der dieses Problem auf eine Weise anspricht, die "erledigt" werden sollte.

BR, Newman

    
newman555p 27.09.2011, 16:41
quelle

2 Antworten

3

PHP bietet keinen allgemeinen Weg, um eine Funktion zu beenden. Aber viele Komponenten, bei denen dieses Problem häufig auftritt, können Sie eine Zeitüberschreitung definieren.

Beispiele:

  • Mit dem HTTP-Stream-Wrapper können Sie eine timeout -Option angeben:

    %Vor%
  • Mit

    PDO (Datenbankabstraktionsschicht) können Sie ein Zeitlimit über das Attribut PDO::ATTR_TIMEOUT festlegen ( Beachten Sie, dass dieses Attribut verschiedene Dinge mit unterschiedlichen Datenbanktreibern bedeuten kann:

    %Vor%
  • Sie können ein Verbindungstimeout festlegen, wenn Sie FTP verwenden:

    %Vor%

Ähnlich werden alle anderen Erweiterungen, die auf potentiell entfernte Ressourcen zugreifen, solche Timeout-Parameter oder -Optionen bereitstellen.

    
NikiC 27.09.2011 16:52
quelle
0

In PHP insbesondere glaube ich nicht, dass Sie eine gültige Möglichkeit haben, die Ausführungszeit für Ihre Funktionen von außerhalb zu steuern. Wie du schon sagtest, werfen Dinge wie set_time_limit einen Fatar Fehler und töten dein Skript.

Ich würde vorschlagen, Ihre Ausführungszeit in Ihren Funktionen zu messen, indem Sie Dinge wie microtime() verwenden und eine Ausnahme auslösen, wenn das Zeitlimit überschritten wird. eine Ausnahme, die Sie draußen fangen können und weiter entsprechend handeln.

    
Deleteman 27.09.2011 16:52
quelle

Tags und Links