如果超过给定时间,则停止运行php函数

时间:2011-09-23 18:45:57

标签: php performance memory-leaks time while-loop

我需要使用php解析许多html文件。

foreach($url_array as $url){

     $file = file_get_contents($url);

     parse_html($file);

}

由于某些原因(文件太大),函数parse_html()需要很长时间才能运行或内存泄漏。

我想监视函数parse_html()。如果运行时间超过给定时间,则应继续解析下一个网址并忽略当前网址。

在大多数情况下,我的代码运行良好,但有些网址无法解析。没有错误输出,我想这是内存泄漏。

2 个答案:

答案 0 :(得分:3)

这不可能像你想象的那样容易。由于您只在一个线程上运行,因此无法进行任何检查。如果此线程阻塞,则阻塞。

您需要创建某种多线程环境,在该环境中运行一个工作线程来执行parse_html()(以提高速度并利用多核处理器甚至可以生成更多工作线程)和另一个线程,如果他们花了太多时间检查并杀死工人。

答案 1 :(得分:2)

考虑到@klaus said,如果您可以修改parse_html()功能,能够执行此检查。在函数内,可能会调用各种子函数或大量for重复循环。您希望在函数中的某个位置或for循环的开头添加一个检查,以查看该函数执行的时间是否太长。

简单的伪代码示例:

function parse_html()
    start_time = 0;

    read file

    foreach element_to_be_parsed
        runtime = current_time - start_time
        if runtime > (whatever)
            break
        end

        ...do parsing stuff
    end
end