| | | | |
| |||||||
| PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen |
|
| | LinkBack | Themen-Optionen | Thema bewerten |
| | |
| PHP Code Flüsterer Registriert seit: 21.08.2005 Beiträge: 4682 PHP-Kenntnisse: Fortgeschritten | |
| | ||
| Neuer Benutzer Registriert seit: 16.12.2011
Beiträge: 16
PHP-Kenntnisse: Fortgeschritten ![]() | Zitat:
5 Mio / 86400 Sekunden = 60 Datensätze pro Sekunde oder irre ich mich jetzt???? Da die Bearbeitung eines Datensatzes (jeder enthält eine komplette Webseite oder ein PDF-Dokument plus zusätzlicher Informationen) bis zu 5 Minuten dauern kann, ergibt sich diese lange Verarbeitungszeit. | |
| |
| | |
| Erfahrener Benutzer Registriert seit: 07.09.2009
Beiträge: 4.005
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() ![]() | Nicht mit exec arbeiten. Und vor allem nicht über den Webserver arbeiten (d.h. keine http-Aufrufe)! Benutz das CLI Interface von PHP und proc_open(), dann kannst du mittels proc_get_status() den Status der gestarteten Prozesse abfragen.
__________________ Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot. |
| |
| | ||
| Neuer Benutzer Registriert seit: 16.12.2011
Beiträge: 16
PHP-Kenntnisse: Fortgeschritten ![]() | Zitat:
Der erste Eindruck war auch viel versprechend... ... der 2. und x. allerdings nicht wirklich irgendwie verstehe ich dieses System noch nicht richtig hier einmal mein Test-Code: Code: echo "<br>".date('Y-m-d H:i:s').": ";
$cwd = null;
$pageid = 721954;
$env = null;
$cmd = "/usr/bin/php -f example.php ".$pageid;
$process = proc_open($cmd , $descriptorspec, $pipes, $cwd, $env);
$maxcount = 0;
if (is_resource($process)) {
$status = proc_get_status($process);
file_put_contents("clients/log.txt",date('Y-m-d H:i:s')." Starting Process ".$status["pid"]."\n");
$running = true;
while ($running == true && $maxcount < 20) {
$log = print_r($status, true);
file_put_contents("clients/log.txt",date('Y-m-d H:i:s')." Status: ".$log."\n", FILE_APPEND);
$maxcount++;
sleep(5);
$status = proc_get_status($process);
if ($status === false) {
$running = false;
}
// if (isset($status["running"])) {
// $running = $status["running"];
// } else {
// $running = false;
// }
}
echo "<br>Prozess beendet<br>";
$return_value = proc_close($process);
echo "<br>".date('Y-m-d H:i:s').": ";
print_r($status);
echo "<br>";
echo "Rückgabewert des Kommandos: $return_value\n";
}
Wenn ich die Scheife (und den Prozess) nicht beenden würde, dann würde er ewig laufen. Wenn ich auf Code: $status["running"] == true Sollte hierzu jemand eine Idee haben, wäre ich wirklich glücklich. In der Zwischenzeit werde ich weiter testen, ändern, testen, ändern, ... (hoffentlich keine Endlosschleife). Irgendwie kann ich mir nicht vorstellen, dass ich der Erste bin, der mehrere Prozesse im Hintergrund ausführen will. Das hat doch bestimmt schon jemand gelöst | |
| |
| | |
| Neuer Benutzer Registriert seit: 16.12.2011
Beiträge: 16
PHP-Kenntnisse: Fortgeschritten ![]() | Aktueller Stand meiner Arbeit: Ich habe mich jetzt einmal mit Gearman beschäftigt. Vorab: Die Aussage, dass Gearman schnell und unkompliziert installiert werden kann, kann ich nicht teilen. Ich brauchte einen Tag und musste viel nachinstallieren Doch inzwischen läuft Gearman tadellos und die ersten Experimente laufen. Die ersten Test zeigten allerdings ein Problem. Da ich für eine paralelle Verarbeitung ca. 100 Worker einsetzen möchte (evtl. mehr) habe ich folgendes programmiert: Code: // 100 Arbeiter starten :-)
$worker = array();
for ($i = 1; $i <= 100; $i++) {
$cmd = "php -f test_worker.php >/dev/null &";
$process = proc_open($cmd , $descriptorspec, $pipes, $cwd, $env);
$worker[$i] = $process;
}
echo "<br>".date('Y-m-d H:i:s').": "."<br>";
echo count($worker);
// 10000 Aufgabe holen
// und diese der Reihe nach an die Arbeiter verteilen
# create our client object
$client= new GearmanClient();
# add the default server (localhost)
$client->addServer();
$jobs = array();
for ($i = 1; $i <= 1000; $i++) {
$job = $client->doBackground("reverse", "this is test ".$i, $i);
if ($client->returnCode() == GEARMAN_SUCCESS)
{
$jobs[$i] = $job;
}
}
// Aufgaben überwachen
$running = true;
while ($running == true) {
sleep(1);
foreach($jobs AS $key => $value) {
$status = $client->jobStatus( $value );
if (!$status[0]) {
unset($jobs[$key]);
}
}
echo "<br>".date('Y-m-d H:i:s')." ".count($jobs) ." jobs are running<br />\n";
if (count($jobs) < 10) {
$running = false;
}
}
// Die Arbeiter dürfen aufhören...
foreach ($worker AS $value) {
// proc_close($value);
proc_terminate($value);
}
Weiss übrigens jemand, wie viele Jobs ich an Gearman senden kann? 5 Mio dürften bestimmt zu viel sein |
| |
|
| Themen-Optionen | |
| Thema bewerten | |
|
|
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| proc_open - Programm im Hintergrund starten und PID auslesen | ottixus | PHP Einsteiger | 8 | 14.05.2012 11:40 |
| Programm starten | Shelter | PHP Einsteiger | 1 | 12.07.2011 21:50 |
| Wie am besten Script über Browser auf der Konsole starten | smilla | PHP Einsteiger | 5 | 15.01.2011 14:46 |
| mehrere Prozesse starten, Möglichkeiten? | Matthiasnet | PHP-Fortgeschrittene | 16 | 30.12.2010 17:53 |
| Download soll starten, wenn Haken gesetzt wurde | DeineOmi | PHP Tipps 2010 | 12 | 05.10.2010 08:07 |
| Shell Command durch PHP im Hintergrund starten | parkourpenner | PHP-Fortgeschrittene | 1 | 30.08.2010 20:26 |
| [Erledigt] [Windows] Server starten | Pat009 | PHP Tipps 2010 | 2 | 22.03.2010 23:07 |
| Mediaplayer mit playbutton starten | Garfield | HTML, Usability und Barrierefreiheit | 7 | 18.02.2010 17:33 |
| Mehrere Prozesse starten | Dominik | PHP Tipps 2009 | 24 | 24.08.2009 21:30 |
| Starten mehrerer PHP-Scripte mit einem Starterscript | Wolla | PHP Tipps 2009 | 5 | 04.06.2009 12:26 |
| Apache läst sich nicht starten | pit62 | Server, Hosting und Workstations | 4 | 10.09.2007 16:30 |
| per Javascript exe auf Client starten | HTML, Usability und Barrierefreiheit | 16 | 05.09.2005 14:04 | |
| PHP-Script automatisiert jede Nacht starten, aber wie? | PHP Tipps 2005 | 10 | 17.02.2005 17:51 | |
| [Erledigt] wie soll ich apache starten? | Server, Hosting und Workstations | 5 | 20.01.2005 14:49 | |
| Sessions starten/ Einstellungen in der PHP.INI | PHP Tipps 2004 | 3 | 04.08.2004 15:28 | |
| Besucher kamen über folgende Suchanfragen bei Google auf diese Seite |
| php prozesse überwachen, arbeiter.php, php \proc_open\ beispiele konsole, prozess im hintergrund starten geht nicht mehr im php5, cli php überwachen, prozess überwachung php, proc_open beispiel, php hintergrundprozess parallel, php preozess überwachen, php prozess überwachen, php exec überwachsen, php user überwachen, hintergrundprozesse php |