4 回答

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超9個(gè)贊
建議可以用生產(chǎn)者-消費(fèi)者模式。
使用python的Queue隊(duì)列,創(chuàng)建一個(gè)隊(duì)列。
開啟一個(gè)生產(chǎn)者線程,從數(shù)據(jù)庫(kù)中讀出status=1的數(shù)據(jù),并一條一條的放入隊(duì)列中。
開啟多個(gè)消費(fèi)者線程,數(shù)量按實(shí)際測(cè)試情況設(shè)置。消費(fèi)者線程每次從隊(duì)列中取出一條記錄,發(fā)起API請(qǐng)求,當(dāng)請(qǐng)求完成后寫入數(shù)據(jù)庫(kù)。
python的Queue自帶線程同步機(jī)制,可以簡(jiǎn)化開發(fā)。
由于瓶頸應(yīng)該在調(diào)用遠(yuǎn)程API,讀取數(shù)據(jù)用一個(gè)線程就夠了,如果嫌慢,可以開8個(gè)線程,每個(gè)線程讀一個(gè)表。
生產(chǎn)者線程從數(shù)據(jù)庫(kù)讀數(shù)據(jù)時(shí)可以做流量限制,在往隊(duì)列放status=1的數(shù)據(jù)時(shí),如果隊(duì)列中數(shù)量達(dá)到了1000條(或自定義閥值)時(shí)阻塞住,直到隊(duì)列中任務(wù)數(shù)量少于1000條,防止隊(duì)列被寫爆掉。

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超7個(gè)贊
不知道為什么要分cate_id進(jìn)行數(shù)據(jù)塊處理,直接讀取一定數(shù)量的數(shù)據(jù)進(jìn)行線程分割,如果要針對(duì)不同cate_id進(jìn)行不同處理也可以放在線程里進(jìn)行分割。
添加回答
舉報(bào)