2

私の目標は、サーバーの応答がレンダリングされる前にユーザーが待たないように、バックグラウンドで時間のかかる機能を起動することです。

コントローラーから非同期プロセスを起動する Symfony プロジェクトがあります。このプロセスは、別のコントローラーを呼び出す Symfony コマンドを起動します。

問題は、プロセスを呼び出しているときですstart()

$process = new Process('/usr/bin/php '.$this->get('kernel')->getRootDir().'/console scopusftpupload ' . escapeshellcmd($params));
$process->start();

その後、プロセスでは何も起こりませんが、リダイレクトと後で実行した他のコードは機能します。

しかし、もしそうなら

$process->run();

その後、プロセスは正常に機能しますが、ビューをレンダリングするにはプロセスが終了するまで待つ必要があります。

私が間違っていることは何ですか?

4

2 に答える 2

3

新しい Process オブジェクトを作成する代わりに exec を使用して、この問題の回避策を見つけました。

exec('/usr/bin/php '.$this->get('kernel')->getRootDir().'/console scopusftpupload ' . escapeshellcmd($params) . ' > /dev/null 2>&1 &');
于 2014-10-21T16:02:06.353 に答える
0

Gearman ジョブ サーバー ( http://gearman.org/ ) を使用して非同期処理を行います。

Symfony プロジェクトでの Gearman の使用を合理化するバンドルがあります。mmoreram/GearmanBundle - https://github.com/mmoreram/GearmanBundleを使用します。基本的に、サービスである可能性のあるワーカーを作成し、時間のかかるタスクのためにそれを呼び出します。時間がかかるデータのインポートに使用します。

于 2014-10-21T15:17:08.850 に答える