關(guān)于一個數(shù)組N多數(shù)據(jù),定時查詢,然后for 按id,分配多個進(jìn)程進(jìn)行處理,,但如何防止他們不重復(fù)處理。
worker 類
運(yùn)行定時內(nèi)獲取數(shù)據(jù)庫數(shù)據(jù),是個多維數(shù)組,如何把數(shù)組中每個數(shù)據(jù)分配一個進(jìn)程進(jìn)行處理,處理完后,就行下一輪循環(huán),如何讓進(jìn)程不會重復(fù)處理數(shù)據(jù),
50條數(shù)據(jù)
分配給10個進(jìn)程后,進(jìn)行處理,發(fā)現(xiàn)處理數(shù)據(jù)的時候有重復(fù)。未找到原因
能給解決重復(fù)處理數(shù)據(jù)的思路
2秒查詢數(shù)據(jù)庫
$j = count($arr);
while($i<=$j-1){
dotask(arr[$i],option); 執(zhí)行任務(wù),
$i++
}
你沒做排重處理當(dāng)然重復(fù)了。
按照進(jìn)程id取模,只處理取模后等于當(dāng)前進(jìn)程id的數(shù)據(jù)就好了。偽代碼
$worker = new Worker();
$worker->count = 10;
$worker->onWorkerStart = function($worker){
$worker_id = $worker->id;
$j = count($arr);
$i = 0;
while($i<=$j-1){
// 不是當(dāng)前進(jìn)程該處理的任務(wù)則忽略
if ($i != $worker->id) continue;
dotask(arr[$i],option); 執(zhí)行任務(wù),
$i++
}
}