J'utilise curl_multi avec multi pour télécharger des fichiers sur différents serveurs. Chaque serveur a plusieurs fichiers à télécharger, j'ai donc une requête curl_multi pour chaque serveur. Lorsque j'exécute les poignées curl_multi, j'exécute simplement toutes les poignées curl_multi dans la même boucle, comme ceci:Combien de fois curl_multi_exec doit-il être appelé?
<?php
do {
$continue_running=false;
foreach($handles as $host => $handle) {
if(!is_resource($handle[0])) {
die("\nHandle is not a resource!\n");
}
if($running_{$host}) {
if(curl_multi_exec($handles[$host][0], $running_{$host}) != CURLM_OK) {
die("\ncurl_multi_exec failed!\n");
}
$continue_running=true;
}
if(!$running_{$host} && !$done_{$host}) {
echo "$host finished in ".(microtime(1)-$start)." seconds\n";
$done_{$host}=true;
}
}
} while ($continue_running);
?>
Ce que je me demande est, combien de fois curl_multi_exec ont en fait être appelé dans une requête boucle ? A-t-il besoin d'être appelé pour chaque petit peu de données transférées? C'est en utilisant beaucoup de cpu et je pense que c'est parce que son "looping" trop occupé. Donc je peux ajouter le sommeil (5); à la fin de chaque boucle pour lui faire utiliser moins de cycles de cpu, ou cela va-t-il ralentir les demandes majorly?
Je voudrais utiliser curl_multi_select, mais je ne peux pas car il y a plusieurs curl_multi_execs en cours de traitement.