Langer Prozess

xanthos

Mitglied
Hallo

Wie kann ich einen langen Prozess (z.B. ein Newsletter an 100'000 Leute) in PHP möglichst Server-freundlich ausführen? Ich habe es bisher so gemacht, dass eine bestimmte Anzahl durchläufe ausgeführt wird (for-Schleife), dann wird ein Reload-JS ausgegeben und anschliessend an der alten Stelle der Prozess wieder aufgenommen. Diese Lösung möchte ich jedoch nicht länger verwenden, da nach 2-3 Reloads der Server anfängt zu stagnieren und es eine Wartezeit von ca. 5 Sekunden gibt, sodass sich der ganze Prozess extrem in die Länge zieht.

Daher meine Frage: gibt es dazu andere Lösungen?

Besten Dank.
 
100.000 Newsletter? Hört sich nach Spam an, oder ist das Script für irgendeine Weltbekannte Firma mit über 100.000 Benutzern gedacht?
 
@buzzom

...langen Prozess (z.B. ein Newsletter an 100'000 Leute)...

Ich habe doch geschrieben "zum Beispiel". Eigentlich handelt es sich um einen CSV-Prozess. Aber um nicht lange erklären zu müssen, habe ich das Beispiel mit dem Newsletter gebracht. Kein Sorge also wegen Spam ;)
 
Das ist ein problematisches Beispiel, denn wenn es um Emails geht kannst Du ja wirklich alle Adressaten (oder zumindest viele) in den bcc schreiben. Worum gehts es denn genau bei dir?
 
Wie gesagt, der Newsltter war nur ein Beispiel. Es geht um eine grosse CSV-Datei, deren Daten ich in eine MySQL-DB eintragen will und zusätzlich Bilder (aus einer URL, die in der CSV-Datei enthalten ist) auf dem Server erzeugen.
Die meiste Zeit nimmt natürlich das Erzeugen der Bilder in Anspruch...
 
Natürlich habe auch ich die Weisheit nicht mit Löffeln gegessen, aber ich glaube da heißt es Ressourcengünstig programmieren und den Aufruf wiederhohlen so wie du es bereits machst. Mir fällt sonst nichts ein. Solltest du allerdings eine Lösng finden, dann lass es mich wissen, denn es interessiert mich schon.
 
via ini_set(..., ...);
kannst du für den Prozess die konfiguration ändern falls die rechte vorhanden sind...
Ansonsten würde ich empfehlen es als cronjob nachtslaufen zulassen wo am wenigsten auslastung ist und es einfach via cli starten...

Von welchen größen redest du den?
Ich löse vereinzelt dinge via shell (grep) wenn z.b. aus einer 4gb logdatei inhalte herausgefiltert werden soll....
 
Besten Dank für die Tipps. Bevor ich mich jedoch hinter eine neue Lösung mache, wollte ich noch Fragen: Weiss einer, weshalb der Server alle paar Sekunden den Prozess anhält?

Die max_execution_time ist auf 30 Sekunden. Nun habe ich eine "Stoppuhr" eingebaut und das Ergabnis verblüft mich doch etwas: Der Server arbeitet ein paar Sekunden und macht dann "Pause" (an ganz unterschiedlichen Stellen im gesamten Prozess). Nach 30 Sekunden ist dann aber nicht Schluss, sondern das ganze läuft weiter, bis die Tatsächliche Arbeitszeit (d.h. abzüglich der Pausen) 30 Sekunden beträgt. :eek::confused:
 
Zurück