прекратить запуск функции php, если превысит заданное время - PullRequest
2 голосов
/ 23 сентября 2011

Мне нужно проанализировать многие html-файлы, используя php.

foreach($url_array as $url){

     $file = file_get_contents($url);

     parse_html($file);

}

По некоторым причинам (файл слишком большой), функция parse_html () выполняется очень долго или имеет утечку памяти.

Я хочу контролировать функцию parse_html ().Если время выполнения превышает заданное время, следует продолжить анализ следующего URL-адреса и игнорировать текущий.

В большинстве случаев мои коды работают отлично, но некоторые URL-адреса не могут быть проанализированы,Нет вывода ошибок, и я предполагаю, что это утечка памяти.

Ответы [ 2 ]

3 голосов
/ 23 сентября 2011

Это не может быть сделано так легко, как вы думаете. Поскольку вы работаете только в одном потоке, вы не можете иметь никаких проверок. Если этот поток блокирует, он блокирует.

Вам необходимо создать некое многопоточное окружение, в котором вы запускаете один рабочий поток для выполнения parse_html() (для увеличения скорости и использования преимуществ многоядерных процессоров вы можете даже создавать больше рабочих потоков) и другого потока это проверяет и убивает рабочих, если они отнимают слишком много времени.

2 голосов
/ 23 сентября 2011

Принимая во внимание то, что @ klaus сказал , вы сможете выполнить эту проверку, если сможете редактировать функцию 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...