Как поддерживать работу PHP-скрипта до его завершения?

#php #memory #rss

#php #память #RSS-канал

Вопрос:

У меня есть скрипт, который ищет определенные слова в статьях об экологических новостях. Он может обработать одну статью, а затем, возможно, еще пять, а затем (ДАННЫЕ НЕ ПОЛУЧЕНЫ) Однако мне приходится циклически просматривать около 30 RSS-каналов, каждый из которых содержит по 10 статей, один раз в неделю.

Есть ли более надежное решение? Или какой-то способ заставить его обработать несколько, а затем перезапустить себя?

 my colleague suggested I explain what happens in the script.
the script loads RSS Feeds from a list. one by one.
it uses magpie_debug to obtain links, title, dates. 
if the date is less than 60 minutes ago, (fresh article) 
it pulls the plaintext (simple_DOM) attaches POS tags using brill tagger
splits text into sentences.
builds arrays of capitalized nouns, matches them twelve different word banks
including a large database of chemicals, companies etc. and generates an
algorithm of 'total environmental impact' for each sentence.
moves to next sentence in article until completed. 
each article takes about 10 seconds to process. 
Moves to the next article. Until all articles processed.
Moves to next feed until all feeds processed.
  

Я без проблем могу получить открытый текст всех статей / каналов, но как только я запускаю обработку, возможности резко падают. Я получаю сообщение о том, что ДАННЫЕ НЕ ПОЛУЧЕНЫ примерно после четырех статей.

Комментарии:

1. может быть, вы можете показать нам какой-нибудь код?

2. Если время ожидания вашего PHP-процесса истекло, вы можете использовать set_time_limit(0) .

3. возможно, вы можете заставить его обработать одну статью, что-то с ней сделать, а затем запустить другую. похоже, у вас какие-то тайм-ауты.

4. код огромен, но приведенное выше описание дает вам представление о том, что происходит с памятью.

5. Почему этот сложный код выполняется внутри веб-сервера? Это звучит как работа для демона. Настройте веб-интерфейс на длительный процесс, не помещайте огромную работу в веб-движок.

Ответ №1:

Я думаю, это то, что вы ищете, основываясь на названии вашего вопроса:

 <?php
//set the time limit to infinite
set_time_limit(0);

//do more stuff
?>
  

Комментарии:

1. спасибо за код ограничения по времени, но он не сильно изменился — по-прежнему нет ДАННЫХ по таймингу. Мы получили некоторые входные данные из PHP, в которых говорится, что между Simple_DOM и Brill Tagger память загружена по максимуму.

2. ах. хорошо. если вы хотите опубликовать часть кода обработки, мы, вероятно, сможем также уменьшить использование памяти.