gpt4 book ai didi

php - 使用 Symfony Process 运行后台任务,无需等待进程完成

转载 作者:行者123 更新时间:2023-12-01 16:26:18 25 4
gpt4 key购买 nike

用户提交表单后,我想渲染一个 View 文件,然后我想启动一个后台任务来处理五个 MS Excel 文件(每个文件最多可以有 2000 行),但方式是这样的用户不必等待该过程完成即可查看该页面。任务完成后我会通过电子邮件通知用户。

我正在使用 Symfony Framework 3。我在下面包含了我的代码。它没有做我想要实现的目标。提交表单后,仅当整个后台任务完成时才会加载页面。

我不确定,但经过大量谷歌搜索后,我认为 The kernel.terminate Event在这里可能有用。但我似乎无法理解如何使用它。

您能告诉我如何解决这个问题吗?

这是我的代码:

我创建了一个控制台命令:

class GreetCommand extends ContainerAwareCommand {

protected function configure()
{
$this->setName('hello:world');
}

protected function execute(InputInterface $input, OutputInterface $output)
{
// My code to execute
}

}

在我的 Controller 中我有

$process = new Process('ls -lsa');
$process->disableOutput();
$that = $this;

$process->start(function ($type, $buffer) use ($that) {
$command = new GreetCommand();
$command->setContainer($this->container);
$input = new ArrayInput(array());
$output = new NullOutput;
$resultCode = $command->run($input, $output);

});

return $this->render('success.html.php', array('msg' => 'Registraion Successful'));

更新

我已经使用 PHP 的连接处理功能解决了这个问题。

感谢这个post

最佳答案

Running Processes Asynchronously

You can also start the subprocess and then let it run asynchronously, retrieving output and the status in your main process whenever you need it. Use the start() method to start an asynchronous process

documentation

因此,要异步启动命令,您应该使用命令创建新进程并启动它

$process = new Process('php bin/console hello:word');
$process->start();

考虑将其更改为完整路径,例如 \usr\bin\php\var\www\html\bin\console hello:word

还有很好的 bundle cocur/background-process您可以使用它,或者至少阅读文档以了解它是如何工作的。

关于php - 使用 Symfony Process 运行后台任务,无需等待进程完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37733820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com