cURL Multi Threading mit PHP

7

Ich verwende cURL, um einige Rangdaten für über 20.000 Domainnamen zu erhalten, die ich in einer Datenbank gespeichert habe.

Der Code, den ich verwende, ist Ссылка .

Das Array $ competitRequests ist 20.000 Anfrage an compete.com API für Website-Ranks.

Dies ist eine Beispielanfrage:   Ссылка ";

Da es 20.000 dieser Anfragen gibt, möchte ich sie in Blöcke aufteilen, also verwende ich den folgenden Code, um das zu erreichen:

%Vor%

Dies funktioniert hervorragend, um die Anfragen in Chargen von 1.000 zu senden, aber das Skript dauert zu lange, um ausgeführt zu werden. Ich habe die max_execution_time auf über 10 Minuten erhöht.

Gibt es eine Möglichkeit, 1.000 Anfragen von meinem Array zu senden, dann die Ergebnisse zu parsen und dann eine Statusaktualisierung auszugeben, dann mit den nächsten 1.000 fortzufahren, bis das Array leer ist? Ab sofort bleibt der Bildschirm während der gesamten Ausführung des Skripts weiß, was mehr als 10 Minuten dauern kann.

    
user1647347 12.09.2012, 18:13
quelle

4 Antworten

8

Dieser macht immer den Job für mich ... Ссылка

    
Glenn Plas 03.10.2012, 18:44
quelle
7

Die obige akzeptierte Antwort ist veraltet, also muss die richtige Antwort uplooted werden.

Ссылка

Jetzt unterstützt PHP den Abruf mehrerer URLs gleichzeitig.

Es gibt eine sehr gute Funktion von jemandem geschrieben, Ссылка

Sie können es einfach benutzen.

    
Mani 19.05.2016 12:10
quelle
3

Ссылка

Du magst PHP einbinden, der abgebildete Code ist nur eine schreckliche Thread-Programmierung, und ich rate dir nicht, das zu tun, aber ich wollte dir den Overhead von 20.000 Threads zeigen ... es sind 18 Sekunden, auf meinem aktuelle Hardware, die ein Intel G620 (Dual Core) mit 8gigs RAM ist, auf Server-Hardware können Sie viel schnellere Ergebnisse erwarten ... wie Sie eine solche Aufgabe fädeln ist abhängig von Ihren Ressourcen und den Ressourcen des Dienstes, den Sie anfordern. ..

    
Joe Watkins 13.09.2012 18:55
quelle
2

Setzen Sie dies oben in Ihrem PHP-Skript:

%Vor%

würde alle Zwischenspeicherung des Webservers oder PHP deaktivieren, so dass Ihre Ausgabe im Browser angezeigt wird, während das Skript ausgeführt wird.

Achten Sie darauf, die apache_setenv -Zeile auskommentieren, wenn Sie den nginx-Webserver anstelle von Apache verwenden.

Update für nginx:

Also benutzt OP nginx, das macht die Sache etwas komplizierter, da nginx die gzip-Komprimierung von PHP nicht abschalten kann. Ich benutze auch nginx und ich habe gerade herausgefunden, dass ich es standardmäßig aktiv habe, siehe:

%Vor%

Also müssen Sie gzip auf nginx.conf deaktivieren und nginx neu starten:

/etc/init.d/nginx restart

oder Sie können mit gzip_disable oder gzip_types Optionen, um Gzip für einige Browser oder für bestimmte Seiteninhaltstypen bedingt zu deaktivieren.

    
Nelson 12.09.2012 18:27
quelle

Tags und Links