国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

請教個問題,關(guān)于定時器從數(shù)據(jù)庫查詢一個數(shù)組N多數(shù)據(jù),,然后for 按id,分配多個進程進行處理,,但如何防止他們不重復處理。

phoenix

關(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++
}

2400 1 0
1個回答

latin

你沒做排重處理當然重復了。
按照進程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++
    }
}
  • phoenix 2021-10-26

    謝謝,不重復了, 5個進程cpu100,看來還是有些問題。

年代過于久遠,無法發(fā)表回答
??