5 Stimmen

Wie kann man eine Symfony-Aufgabe im Hintergrund aus einer Aktion heraus richtig ausführen?

Was ist der richtige Weg, um Symfony Aufgaben in einem separaten Prozess auszuführen. Meine erste Vermutung wäre, fork/exec zu verwenden, aber laut こん Sie können es nicht mit etwas tun, das Dateideskriptoren oder Verbindungen offen hält (wie MySQL). Das klingt also nicht so, als wäre es eine Option. Eine andere Alternative ist, Folgendes zu tun exec('symfony taskname &') aber das scheint mir ein Hack zu sein. Ist das das Beste, was ich tun kann? Gibt es einen dritten Weg?

4voto

ryeguy Punkte 62987

In der Regel wird dies mit Hilfe einer Aufgabenwarteschlange gehandhabt. Wenn Sie einen Hintergrundprozess ausführen wollen, fügen Sie ihn zu einer Warteschlange hinzu (Sie könnten Ihre Datenbank verwenden oder einen Warteschlangen-Daemon wie beanstalkd). Sie haben dann einige daemonisierte Prozesse, deren Aufgabe es ist, Arbeit aus der Warteschlange zu ziehen und sie auszuführen.

3voto

Alex Grin Punkte 7981

Ich habe es folgendermaßen gemacht:

exec('nohup ' . sfConfig::get('sf_root_dir') . '/symfony TASKNAME >/dev/null &');

Sie müssen STDOUT umleiten, sonst läuft es nicht im Hintergrund (obwohl Sie /dev/null nicht verwenden müssen, wenn Sie die eigentliche Ausgabe haben wollen). In meinem Fall habe ich alle meine Aufgaben zu verwenden, Symfony's file logger, so dass es kein Problem war.

Ich suche aber immer noch nach einer besseren Lösung. Dies scheint ein Hack zu sein.

-7voto

Erik Punkte 630

Php kennt kein Multithreading.
Und ja, es ist ein großer Fehler in php IMO.
Es gibt eine Möglichkeit, Multithreading zu betreiben, aber es wird nicht empfohlen. Es ist kompliziert und hässlich und es ist eine Frage, kein Aufruf für Probleme.

Also, ich denke, das Beste, was Sie tun können, ist so etwas wie exec, oder maby etwas wie Aufruf eines Webservice wie Call?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X