同时执行三个功能

时间:2014-02-08 22:46:16

标签: php multithreading simple-html-dom

我用这样的三个函数来支持php:

public function a($html,$text)
{
    //blaa
return array();
}
public function b($html,$text){
    //blaa
return array();
}
public function c($html,$text){
    //blaa
return array();
}
require_once 'simple_html_dom.php';
$a=array();
$html=new simple_html_dom();
$a=$this->a($html,$text);
$b=$this->b($html,$text);
$c=$this->c($html,$text);
$html->clear();
unset($html);
$a=array_merge($a, $c);
$a=array_merge($a, $b);


  • a($html,$text)在给出结果前需要5秒

  • b($html,$text)在给出结果前需要10秒

  • c($html,$text)在给出结果前需要12秒

因此系统需要27秒才能给我一个结果,但我希望在12秒内获得结果。我不能使用线程,因为我的托管不支持线程。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:4)

PHP不支持开箱即用。如果你真的想这样做,你有两个基本选择(是的,它会变脏)。如果您需要一个严肃的解决方案,具体取决于您的实际用例,还有另一种选择需要考虑。

选项1:使用一些AJAX-trickery 使用按钮创建一个页面,该按钮触发对要调用的不同功能的三个AJAX调用。

选项2:运行命令 如果您使用的是UNIX,则可以从PHP脚本中触发命令来运行PHP脚本(php xyz.php),并在不同的线程上运行它。

严重选项:使用队列 说真的:使用像rabbitMQ或BeanstalkD这样的队列系统来做这些事情。 Laravel开箱即用。

答案 1 :(得分:3)

如果等待时间是由阻塞IO(等待服务器响应)引起的,那么curl_multi可能会有所帮助。

但是,根据您发布的代码,它看起来不像是您的问题。

看起来更像简单的html dom需要很长时间来解析你的HTML。这并不太令人惊讶,因为它不是一个非常好的图书馆。如果是这种情况,您应该考虑切换到DomXPath。

答案 2 :(得分:1)

你可能想看看jQuery延迟对象.... $。应该处理这种情况。

相关问题