/ / PHP Multi Curl oder Multi Threading - PHP, Multithreading, Curl, Curl-Multi

PHP Multi Curl oder Multi Threading - PHP, Multithreading, Curl, Curl-Multi

Ich baue einen Cron-Job, der Folgendes tut:
1. Holen Sie sich Datensätze von der DB
2. Lösen Sie für jeden Datensatz eine Curl-Anforderung an eine API. (Einige Anfragen sind schnell und andere laden große Bilder oder Videos hoch).
3. Wenn eine Anforderung nicht erfolgreich ist, erstellen Sie eine neue Anforderung mit leicht abweichenden Parametern (die noch auf dem Datensatz basieren), und senden Sie sie erneut. Dies kann mehrmals passieren.
4. Bei erfolgreicher Anforderung einige DB-Auswahl- / Einfügungen vornehmen (basierend auf dem ursprünglichen Datensatz, der zum Senden dieser Anforderung führte).

Das Senden der Anfragen sollte parallel erfolgen, da einige Minuten dauern (große Uploads) und einige sehr schnell sind.

Was wäre am besten geeignet, dies zu tun -Sie haben ein Masterskript, das die Datensätze aus der Datenbank abruft und für jeden Datensatz einen Prozess erstellt, der das Aufrufen der API und das Analysieren der Antwort behandelt. Oder curl_multi verwenden, um mehrere Anfragen gleichzeitig aus demselben Skript zu senden und jede zu analysieren, wenn sie zurückgegeben wird?

Wenn Sie mehrere Prozesse verwenden, was wäre der beste Weg, dies zu tun - PCNTRL, Popen usw.?
Wenn ich curl_multi verwende, woher würde ich wissen, welcher DB-Datensatz welcher zurückgehenden Anforderung entspricht?

EDIT: Wenn Sie curl multi verwenden, würde ich wahrscheinlich diese Technik einsetzen: http://www.onlineaspect.com/2009/01/26/how-to-use-curl_multi-without-blocking/
So würde es nicht warten, bis alle Anforderungen abgeschlossen sind, bevor ich mit der Verarbeitung der Antworten beginne.

Vielen Dank!

Antworten:

1 für die Antwort № 1

Ich hatte ein ähnliches Problem, als ich einen großen Datensatz verarbeitete.

Die einfachste Antwort war für mich zu machen 4 separate Skripte, jeder geschrieben zu nehmen eine bestimmte vierte der beteiligten DB-Spalten und in meinem Fall verarbeitend oder in Ihrem Fall Curl-Anfragen. Dies würde verhindern, dass eine große Anforderung an einen der Prozesse die anderen blockiert.

Im Gegensatz dazu wird ein einzelnes Skript, das curl_multi verwendet, immer noch eine große Anfrage sperren. Es würde Ihnen nur erlauben, mehrere gleichzeitig in eine Warteschlange zu stellen.

Optimal schreibe ich dies stattdessen in einer SpracheMit nativer Unterstützung für Multithreading können Sie Dinge gleichzeitig ausführen, ohne auf Hacks zurückgreifen zu müssen. Dies ist jedoch verständlicherweise nicht immer eine Option.


1 für die Antwort № 2

Am Ende habe ich mich für Multiprocessing mit PCNTRL entschieden (wobei die Anzahl der gleichzeitigen Prozesse begrenzt wurde). Mir schien, dass curl_multi nicht für Tausende von Anfragen geeignet ist.