簡體   English   中英

PHP多卷曲或多線程

[英]PHP Multi curl or multi threading

我正在構建一個執行以下操作的cron作業:
1.從DB獲取記錄
2.為每條記錄觸發對API的curl請求。 (有些請求很快,有些請求上傳大圖片或視頻)。
3.如果請求不成功,請創建一個參數略有不同的新請求(仍基於記錄)並再次發送。 這可能會發生幾次。
4.成功請求時,執行一些數據庫選擇/插入(基於導致發送此請求的原始記錄)。

發送請求應該並行發生,因為有些需要幾分鍾(大型上傳),有些非常快。

最合適的做法是 - 擁有一個從DB獲取記錄的主腳本,並為每個記錄創建一個進程來處理調用API和解析響應? 或者使用curl_multi從同一個腳本同時發送多個請求並在返回時解析每個請求?

如果使用多個進程,最好的方法是什么 - PCNTRL,popen等?
如果使用curl_multi,我怎么知道哪個DB記錄對應哪個返回請求?

編輯:如果使用curl multi我可能會采用這種技術: http ://www.onlineaspect.com/2009/01/26/how-to-use-curl_multi-without-blocking/
這樣它就不會在我開始處理響應之前等待所有請求完成。

謝謝!

處理大型數據集后,我遇到了類似的問題。

對我來說最簡單的答案是制作4個單獨的腳本 ,每個腳本都寫入以獲取所涉及的特定四分之一的db列,在我的例子中進行處理或在您的情況下進行curl請求。 這可以防止其中一個進程的大請求鎖定其他進程。

相比之下,使用curl_multi的單個腳本仍將鎖定大型請求,它只允許您一次排隊多個。

最好我會用一種本地支持多線程的語言來編寫它,這樣你就可以在不訴諸黑客的情況下同時發生事情,但這並不總是一種選擇。

最后,我使用PCNTRL進行多處理(限制了concurent進程的數量)。 在我看來curl_multi不會擴展成千上萬的請求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM