2010-12-02 6 views
0

J'ai une application web PHP qui gratte un moteur de recherche pour un mot clé donné.Comment exécuter une fonction PHP simultanément sur un tableau?

Actuellement, l'application parcourt un ensemble de mots-clés exécutant la fonction de récupération d'un mot-clé à la fois.

Ceci est OK pour le moment car le nombre de mots-clés est assez petit, mais il ne sera pas bien adapté.

Je pense que la meilleure façon de procéder est de sélectionner un plus petit ensemble de mots-clés à partir de la limite de mysql db using, puis d'exécuter la fonction scrape simultanément sur l'ensemble du tableau. Une fois ce set terminé, je passe au set suivant.

Mais je suis coincé avec la façon d'exécuter la fonction simultanément contre la baie.

Comment gérez-vous cela?

+0

Ceci est plus un commentaire qu'une réponse: php n'est pas bon en programmation simultanée, il n'a pas été conçu pour cela. Actuellement, la seule option est d'utiliser l'extension pcntl et d'autres processus, mais ce n'est pas très efficace. Si vous voulez écrire des programmes multi-threads, mon conseil est d'utiliser Java à la place. – Dmitri

+0

Si par "simultanément" vous voulez dire "sur plusieurs threads", alors non. PHP n'a pas de fonctions de multithreading. – cdhowie

+0

@Dmitri/moi frissonne et dit "Ew, Java". –

Répondre

2

Il n'y a pas de concurrence dans PHP même, mais si vous obtenez votre résultat de recherche avec cURL il y a un multiple-request feature dans l'extension cURL, donc vous pouvez paralléliser au moins la récupération des résultats.

+0

Vous pouvez demander que nos pages soient téléchargées en même temps, mais vous ne pouvez pas les analyser en même temps une fois téléchargées. php n'est pas un langage multithread, point. Vous ne pouvez rien y faire. – Dmitri

+1

C'est ce que j'ai dit. Comme l'extraction prend plus de temps que l'analyse, cette fonctionnalité peut être utile. – 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

Ce n'est pas simultané, c'est séquentiel. Concurrent signifie plusieurs opérations en même temps, séquentielle (php way) est une étape à la fois. – Dmitri

+0

Oui. Regardez les mots de l'auteur: "Une fois que l'ensemble est terminé, je vais passer à l'ensemble suivant." Ainsi, je pense qu'il voulait dire exactement le traitement séquentiel du tableau entier (petite partie des données de la base de données), pas des données entières. – Lex

Questions connexes