2016-03-01 73 views
-1

我正在PHP中使用循環(100條記錄)處理一些數據。我在循環中調用API,大部分時間所有記錄都在預期時間內處理。但有時候任何單個循環都會花費很多時間,因爲等待api響應只會大大增加總體處理時間。PHP - 繼續/打破循環它目前的循環需要超過x秒

如果PHP在任何單個循環中花費超過x秒的時間來「繼續」循環,那麼我們可以在預計時間內處理整個記錄,但是會以少量未處理的記錄爲代價?

+5

沒有代碼示例,它將很難幫助你。添加一些代碼,它不一定是真正的代碼,但它必須展示您的情況和要求。答案取決於你在循環中實際做了什麼 – RiggsFolly

+0

如果你正在使用curl,你可以設置一個超時(CURLOPT_TIMEOUT)。請求將在超時後終止,並且您將繼續處理 –

+0

我的代碼更復雜,我選擇記錄,調用多個api,多次檢查數據庫,將數據庫插入到多個表中。對於單個循環元素,我無法承受超過10秒的時間,90%的記錄被快速處理,只有少數記錄有時會出現瓶頸。 –

回答

0

如果您使用CURL調用API,則可以檢查CURLOPT_CONNECTTIMEOUTCURLOPT_TIMEOUT(ref here)。 否則它不容易實現。您應該創建一個多線程環境,其中一個工作線程運行循環的執行,另一個線程檢查執行是否耗時過長。

+0

這個解決方案很好,但有時插入到mysql數據庫需要時間,因爲其他腳本插入到同一個表中。 –