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