cURL Multi-Threading mit PHP
Bin ich mit cURL, um einige Ranking-Daten für über 20.000 domain-Namen, die ich habe, in einer Datenbank gespeichert.
Den code, den ich verwende, ist http://semlabs.co.uk/journal/object-oriented-curl-class-with-multi-threading.
Array $competeRequests ist 20.000 Anfrage zu compete.com api für die website zählt.
Dies ist ein Beispiel-request:
http://apps.compete.com/sites/stackoverflow.com/trended/rank/?apikey=xxxx&start_date=201207&end_date=201208&jsonp=";
Da gibt es 20.000 solcher Anfragen möchte ich brechen Sie in Stücke also ich bin mit dem folgenden code erreichen, dass:
foreach(array_chunk($competeRequests, 1000) as $requests) {
foreach($requests as $request) {
$curl->addSession( $request, $opts );
}
}
Dies funktioniert gut für das senden der Anfragen in Chargen von 1.000, aber das script zu lange dauert, um Sie auszuführen. Ich habe erhöht die max_execution_time auf über 10 Minuten.
Gibt es eine Möglichkeit zum senden von 1.000 Anfragen aus meinem array dann analysieren und die Ergebnisse dann Ausgang ein status-update dann weiter mit den nächsten 1.000, bis das array leer ist? Ab jetzt wird der Bildschirm einfach weiß bleibt die gesamte Zeit, in der das Skript ausgeführt werden kann, über 10 Minuten.
- Sie haben, führen Sie dieses script über Ihren server, können Sie nicht einfach es manuell ausführen? ... Von 20.000 Anfragen, die eine Menge von Anfragen, diese werden wahrscheinlich haben, um im hintergrund laufen
- Ich wollte es als cron-job eventuell..jetzt bin ich dem ausführen im browser..
- php.net/manual/en/function.curl-multi-init.php
- Ich bin schon mit curl multi... "den code im mit ist semlabs.co.uk/journal/.... "
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das man immer macht den job für mich... https://github.com/petewarden/ParallelCurl
Den oben genannten akzeptierten Antworten, ist veraltet, Also, richtige Antwort von Ihnen positiv bewertet werden.
http://php.net/manual/en/function.curl-multi-init.php
Nun, PHP unterstützt das abrufen mehrerer URLs zur gleichen Zeit.
Gibt es eine sehr gute Funktion von jemandem geschrieben,
http://archevery.blogspot.in/2013/07/php-curl-multi-threading.html
Können Sie es einfach verwenden.
https://github.com/krakjoe/pthreads
Können Sie thread in PHP, der code abgebildet ist-einfach nur schrecklich-thread-Programmierung, und ich weiß nicht raten, das ist, wie Sie es tun, aber zeigen wollte Sie den overhead von 20.000 threads ... es ist 18 Sekunden lang, auf meine aktuelle hardware ist ein Intel G620 ( dual-core ) mit 8gigs ram auf server-hardware, die Sie erwarten können, viel schneller Ergebnisse ... wie Sie thread eine solche Aufgabe ist abhängig von Ihren Ressourcen, und die Ressourcen des service, den Sie anfordern, ...
insert amount of CPU cores here
gleichzeitig ausführen, ausgenommen für Maschinen mit HT und threads an, die haben extremenwait
Zeiten, und es sollte in der Lage sein, um Warteschlange mindestens 2^32 threadsSetzen Sie diese oben in deinem php-Skript:
wäre disable all caching web server oder php tun kann, was Ihr ausgegeben werden, das im browser angezeigt wird, während das Skript ausgeführt wird.
Achten, um kommentieren Sie die
apache_setenv
Linie, wenn Sie nginx web-server statt apache.Update für nginx:
So OP ist mit nginx, das macht die Sache ein bisschen schwieriger, da nginx nicht lassen zum deaktivieren der gzip-Kompression von PHP. Ich nutze auch nginx und ich habe gerade herausgefunden, ich habe es per default aktiv, siehe:
so müssen Sie zum deaktivieren der gzip auf nginx.conf und Neustart nginx:
/etc/init.d/nginx restart
oder Sie können spielen mit der gzip_disable oder gzip_types Optionen, bedingt deaktivieren der gzip-für einige Browser oder für einige Inhalte auf der Seite-Arten bzw.