1 回答
TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超5個(gè)贊
都行,建議你用隊(duì)列來(lái)序列化整個(gè)工作,redis這種kv數(shù)據(jù)庫(kù)級(jí)的或者是gevent.queue這種協(xié)程級(jí)的或者是multiprocessing.queue這種跨進(jìn)程的隊(duì)列都行……
目測(cè)這個(gè)工作主要瓶頸在檢查url是否正常(http code 2xx?),次瓶頸在從數(shù)據(jù)庫(kù)讀這10M條記錄。
對(duì)于檢查url的工作,可以通過(guò)gevent/twisted/多線程/多進(jìn)程來(lái)并發(fā),就像你說(shuō)的pool設(shè)置到100。
對(duì)于從數(shù)據(jù)庫(kù)讀出記錄,并行不見(jiàn)得比串行訪問(wèn)更快……
所以,開(kāi)一個(gè)到兩個(gè)reader從數(shù)據(jù)庫(kù)讀,開(kāi)100個(gè)以上的checker去檢查url就可以了。中間放一個(gè)queue用來(lái)通信。
是這樣的結(jié)構(gòu): reader ---(寫(xiě)入)--> 隊(duì)列 ---(讀出)--> checker
至于隊(duì)列用什么實(shí)現(xiàn),不是很重要……因?yàn)槠款i不在這兒……
從數(shù)據(jù)庫(kù)讀就很容易了,如果只有一個(gè)reader,就select * from table得到一個(gè)完整的數(shù)據(jù)集,遍歷寫(xiě)入隊(duì)列即可
添加回答
舉報(bào)
