2010-12-02 2 views
0

나는 주어진 키워드에 대한 검색 엔진을 긁는 PHP 웹 앱을 가지고있다.PHP 함수를 배열과 동시에 실행하는 방법은 무엇입니까?

현재 앱은 한 번에 하나의 키워드로 스크래핑 기능을 실행하는 키워드 배열을 반복합니다.

키워드 수가 상당히 적기 때문에 현재로서는 문제가되지 않지만 잘 확장되지는 않습니다.

나는 최선의 방법은 mysql db에서 제한을 사용하여 작은 키워드 집합을 선택한 다음 전체 배열에 대해 동시에 스크래핑 기능을 실행하는 것입니다. 일단 그 세트가 끝나면, 나는 다음 세트로 넘어갈 것이다.

그러나 배열에 대해 동시에 함수를 실행하는 방법이 붙어 있습니다.

어떻게 처리할까요?

+0

이 질문에 대한 답변보다 많습니다. PHP는 동시 프로그래밍이 좋지 않아서 설계되지 않았습니다. 현재 유일한 옵션은 pcntl 확장을 사용하고 다른 프로세스를 fork하는 것이지만, 그렇게 효율적이지는 않습니다. 멀티 스레드 프로그램을 작성하고 싶다면 Java를 대신 사용하는 것이 좋습니다. – Dmitri

+0

"동시"로 "다중 스레드에서"를 의미하는 경우 "아니오"입니다. PHP에는 멀티 스레딩 기능이 없습니다. – cdhowie

+0

@Dmitri/me shudders는 "Ew, Java"라고 말합니다. –

답변

2

PHP 자체에는 어떤 동시성도 없지만 cURL을 사용하여 검색 결과를 얻은 경우에는 cURL 확장에 multiple-request feature이 있으므로 결과를 최소한 병렬 처리 할 수 ​​있습니다.

+0

우리는 동시에 다운로드 할 페이지를 요청할 수 있습니다. 그러나 다운로드 한 페이지는 동시에 분석 할 수 없습니다. PHP 다중 스레드 언어, 기간 아닙니다. 당신이 그것에 대해 할 수있는 일은 없습니다. – Dmitri

+1

그건 내가 말한거야. 가져 오는 작업은 구문 분석보다 오래 걸리기 때문에이 기능을 살펴 보는 것이 좋습니다. – AndreKR

0
<?php 
$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple"); 

function test_alter(&$item1, $key, $prefix) 
{ 
    $item1 = "$prefix: $item1"; 
} 

function test_print($item2, $key) 
{ 
    echo "$key. $item2<br />\n"; 
} 

echo "Before ...:\n"; 
array_walk($fruits, 'test_print'); 

array_walk($fruits, 'test_alter', 'fruit'); 
echo "... and after:\n"; 

array_walk($fruits, 'test_print'); 
?> 
+0

이것은 동시 적이 지 않으며 순차적입니다. 동시성은 동시에 여러 작업을 의미하며 순차적 (PHP 방식)은 한 번에 한 단계 씩 진행됩니다. – Dmitri

+0

예. 저자의 말을보십시오. "일단 그 세트가 끝나면, 나는 다음 세트로 넘어갈 것입니다." 따라서, 나는 전체 데이터가 아니라 전체 어레이 (DB로부터의 데이터의 작은 부분)를 정확히 순차적으로 처리하는 것을 의미한다고 생각한다. – Lex

관련 문제