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

我使用 exec instaed 创建新的 Process 对象找到了解决此问题的方法。

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 回答