我的目标是在后台启动一些耗时的功能,以避免用户在呈现服务器响应之前等待。
我有一个Symfony项目,我从控制器启动一个异步进程。此过程将启动一个Symfony命令,该命令将调用另一个控制器。
问题是当我使用start()
$process = new Process('/usr/bin/php '.$this->get('kernel')->getRootDir().'/console scopusftpupload ' . escapeshellcmd($params));
$process->start();
然后这个过程没有任何反应,但重定向和其他一些我后来工作的代码。
然而,如果我这样做
$process->run();
然后该过程正常,但我需要等到过程结束才能呈现视图。
知道我做错了吗?
答案 0 :(得分:3)
我使用exec找到了解决此问题的方法,而不是创建新的Process对象。
exec('/usr/bin/php '.$this->get('kernel')->getRootDir().'/console scopusftpupload ' . escapeshellcmd($params) . ' > /dev/null 2>&1 &');
答案 1 :(得分:0)
我们使用Gearman作业服务器进行异步处理 - http://gearman.org/
有一些软件包可以简化在Symfony项目中使用Gearman的过程。我们使用mmoreram / GearmanBundle - https://github.com/mmoreram/GearmanBundle。基本上,您可以创建可以作为服务的工作者,并将其称为耗时的任务。我们将它用于需要很长时间的数据导入。