Ankündigung

Einklappen
Keine Ankündigung bisher.

Langes Skript sorgt regelmäßig für Timeouts

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Langes Skript sorgt regelmäßig für Timeouts

    Hallo,

    ich habe folgendes Problem:

    Ich habe 2 "Programme" - eines davon läuft täglich im Cronjob, eines stündlich. Nun brauch aber das tägliche Skript ca 3-4 Stunden für einen Durchlauf. Ich bekomme nun aber einen Gateway-Timeout bzw. einen Error im Plesk "Premature end of script headers: file.php" bzw. "11231#0: *215703 upstream timed out (110: Connection timed out) while reading response header from upstream"....

    Das Skript liest eine Datei ein (mit ca 31.000 Zeilen) & muss für sämtliche Zeilen insgesamt 3 SOAP-Befehle verarbeiten. Diese dauern zusammen ca 0.4Sekunden....

    Wie ließe sich das am Besten beheben? Ich hatte zuerst daran gedacht dass ich die 31.000 Zeilen in 31 einzelne Programme aufteile welche dann jeweils 6:40 Minuten benötigen. Diese würden dann vorzugsweise parallel abgearbeitet... Andere Ansätze?

    Grüße,
    Schrubber

  • #2
    Mehr als 1/10 Sekunde pro SOAP Befehl? Da würde ich erstmal ansetzen. Das ist für einen Computer ja eine Ewigkeit. Das geht bestimmt auch schneller...
    Pre-Coffee-Posts sind mit Vorsicht zu geniessen!

    Kommentar


    • #3
      SOAP? Das erinnert mich an Java, sei froh, dass es nicht 4 Sekunden sind

      Spass beiseite: Die Zeilen zu teilen macht keinen Sinn. Der Eingangspunkt muss zentral sein. Du kannst darauf allerdings Worker aufbauen und 10 Requests gleichzeitig absetzen (mittels einer Queue oder so). Ein Ansatzpunkt könnte Gearman sein.
      [URL="https://github.com/chrisandchris"]GitHub.com - ChrisAndChris[/URL] - [URL="https://github.com/chrisandchris/symfony-rowmapper"]RowMapper und QueryBuilder für MySQL-Datenbanken[/URL]

      Kommentar


      • #4
        Zitat von ChristianK
        SOAP? Das erinnert mich an Java, sei froh, dass es nicht 4 Sekunden sind
        Genau, weil Java-Programme tendenziell ja auch für alles immer voll lange brauchen. Würden doch bloß alle php einsetzen (ja, Ironie)

        Ich habe hier eine ähnliche Situation. Ist nicht direkt SOAP, was zunächst aber egal ist. Es ist ein API-Endpoint, der lange für eine Antwort benötigt. Gründe dafür sind so vielfältig wie geeignete Lösungsansätze.

        Ich mache das so, dass ich im Hintergrund regelmäßig (cronjob) die Daten von dem Endpunkt ziehe und auf meiner Seite spiegel. Das ist dann nicht mehr wirklich live, aber das Nutzungserlebnis ist wesentlich besser, als wenn ich erst Minuten lang auf ein Ergebnis warten muss.

        Wenn es ungeeignet ist, ständig den Endpunkt im Hintergrund zu spiegeln, wäre ein anderer Ansatz tatsächlich etwas wie Gearman oder eine andere MessageQueue zu nutzen. Ich würde einen Worker beauftragen, die Daten von einem Endpunkt zu ziehen und den Verarbeitungsstand dann ständig kontrollieren, bis die Daten irgendwann tatsächlich vorliegen. Das kann man dann via Ajax machen. Und der User bekommt ein visuelles Feedback, wie weit der Prozess ist.

        Kommentar

        Lädt...
        X