параллельная обработка в PHP - PullRequest
0 голосов
/ 11 июня 2011

У меня длинный список слов, и я пытаюсь распечатать существительные только для вывода.Метод, в котором я пытаюсь сделать это:

IF THE WORD IS A PROPER NOUN , JUST PRINT IT {
 // THIS IS DONE USING REGULAR EXPRESSION
}
ELSE{
 // GO TO ONLINE DICTIONARY http://www.thefreedictionary.com/WORD AND SEE IF CHECK IF THE WORD IS NOUN BY HAVING ANOTHER REGULAR EXPRESSION CHECKING FOR THE NOUN IN THE SOURCE CODE OF THIS PAGE
}

Я протестировал модульную часть else, и она отлично работает для отдельных слов.Без части else программа печатает 4000+ слов, но когда я интегрировал часть else, программа печатает только около 80 слов, что неправильно.

Может кто-нибудь указать, в чем может быть проблема?Есть ли какой-нибудь параллельный способ обработки этих запросов для многих слов?

Ответы [ 5 ]

3 голосов
/ 11 июня 2011

Может кто-нибудь указать, в чем может быть проблема?

Я предполагаю, что это потому, что HTTP-запрос к веб-сайту словаря занимает время.

Есть ли какой-нибудь параллельный способ обработки этих запросов для многих слов?

Вы можете составить список несоответствующих слов, а затем обработать его позже / параллельно. Но это не тривиально. Вы можете начать с отправки нескольких HTTP-запросов одновременно с помощью библиотеки curl или другого компонента с несколькими запросами.

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

0 голосов
/ 11 июня 2011

Конечно, ветвь if с регулярными выражениями немного быстрее сетевых запросов.Поэтому я думаю, что здесь нет «проблемы», она просто медленная.

Существуют собственные способы получить параллель в PHP, но это не так просто.См. http://de.php.net/manual/en/ref.pcntl.php

Другой вариант - использовать некоторые функции exec для вызова подпрограмм для каждого сетевого запроса и не ждать ответа в основном сценарии.См. Есть ли способ использовать shell_exec, не дожидаясь завершения команды?

0 голосов
/ 11 июня 2011

Я однажды задал похожий вопрос о Шаблонах для многопроцессорных процессов PHP? , есть несколько хороших ответов.

0 голосов
/ 11 июня 2011

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

Попробуйте сделать это другим способом, например, использовать статический словарь. Это быстрее, эффективнее и без риска.

0 голосов
/ 11 июня 2011

Почему бы вам не использовать файл словаря, например / usr / share / dict / words ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...