Heim  >  Artikel  >  Backend-Entwicklung  >  Analyse von Methoden zur Implementierung von Multithreading mithilfe von foreach in Kombination mit Curl in PHP

Analyse von Methoden zur Implementierung von Multithreading mithilfe von foreach in Kombination mit Curl in PHP

高洛峰
高洛峰Original
2016-12-21 11:46:471241Durchsuche

Das Beispiel in diesem Artikel beschreibt die Methode zum Kombinieren von foreach mit Curl in PHP, um Multithreading zu erreichen. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

Multi-Threading wird von PHP nicht unterstützt, aber wir können foreach für Pseudo-Multi-Threading verwenden, dieses Pseudo-Multi-Threading jedoch nicht notwendigerweise schneller als Single-Threading. Schauen wir uns ein Beispiel an.

Wenn Sie die foreach-Anweisung verwenden, um Bild-URLs zu durchlaufen und alle Bilder lokal über CURL zu speichern, besteht das Problem, dass nur eines erfasst werden kann . Verwenden Sie nun foreach und CURL. Fassen wir die Methode zum Erstellen mehrerer URL-Anfragen zusammen.

Methode 1: Schleifenanforderung

$sr=array(url_1,url_2,url_3);
foreach ($sr as $k=>$v) {
 $curlPost=$v.'?f=传入参数';
 $ch = curl_init($curlPost) ;
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) ; // 获取数据返回
 curl_setopt($ch, CURLOPT_BINARYTRANSFER, true) ; // 在启用 CURLOPT_RETURNTRANSFER 时候将获取数据返回
 $data = curl_exec($ch) ;
 echo $k.&#39;##:&#39;.$data.&#39;<br>&#39;;
}
curl_close($ch);

Das Obige Code erfordert besondere Aufmerksamkeit. Wenn er innerhalb der foreach-Schleife platziert wird, gibt es mehrere IMGURLs, und es kann nur eine URL erfasst werden : Multithreading-Schleife

<?php
multi_threads_request($nodes){
  $mh = curl_multi_init();
  $curl_array = array();
  foreach($nodes as $i => $url)
  {
   $curl_array[$i] = curl_init($url);
   curl_setopt($curl_array[$i], CURLOPT_RETURNTRANSFER, true);
   curl_multi_add_handle($mh, $curl_array[$i]);
  }
  $running = NULL;
  do {
   usleep(10000);
   curl_multi_exec($mh,$running);
  } while($running > 0);
  $res = array();
  foreach($nodes as $i => $url)
  {
   $res[$url] = curl_multi_getcontent($curl_array[$i]);
  }
  foreach($nodes as $i => $url){
   curl_multi_remove_handle($mh, $curl_array[$i]);
  }
  curl_multi_close($mh);
  return $res;
}
print_r(multi_threads_request(array(
 &#39;http://www.php.cn&#39;,
 &#39;http://tools.php.cn&#39;,
));
Hier verwenden wir hauptsächlich curl_multi_init(), um mehrere URL-Anfragen zu implementieren, da PHP selbst jedoch kein Multithreading unterstützt , die Pseudo-Multi-Threading-Geschwindigkeit ist möglicherweise nicht schneller als die Single-Threading-Geschwindigkeit

Ich hoffe, dieser Artikel wird für alle in der PHP-Programmierung hilfreich sein.

Weitere Analysen zur Methode von foreach in Kombination mit Curl zur Erzielung von Multithreading in PHP finden Sie auf der chinesischen PHP-Website!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn