2010-12-02 11 views
0

私は、特定のキーワードの検索エンジンをスクラップするPHP Webアプリケーションを持っています。PHP関数を配列に対して同時に実行するには?

現在、アプリケーションは一度に1つのキーワードのスクレイプ機能を実行するキーワードの配列をループしています。

キーワードの数がかなり少ないため、現時点では問題ありませんが、うまく調整できません。

私は、mysql dbからlimitを使用してより小さなキーワードセットを選択してから、配列全体に対してscrape機能を同時に実行することをお勧めします。そのセットが終了したら、次のセットに移ります。

しかし、私はどのように配列に対して同時に機能を実行するかにつきまとっています。

これはどのように処理しますか?

+0

これは、答えよりもコメントの詳細です:PHPはそれはそれのために設計されていない、並行プログラミングが得意ではありません。現在、唯一のオプションはpcntl拡張を使用して他のプロセスをフォークすることですが、あまり効率的ではありません。マルチスレッドプログラムを作成したいのであれば、代わりに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 way)は一度に1ステップです。 – Dmitri

+0

はい。作者の言葉を見てください:「そのセットが終わったら、私は次のセットに移ります。」したがって、私は彼が配列全体(データベースからのデータの小さな部分)を正確に逐次処理することを意味し、データ全体ではないことを意味したと思います。 – Lex

関連する問題