【背景】
成都創(chuàng)新互聯(lián)憑借專(zhuān)業(yè)的設(shè)計(jì)團(tuán)隊(duì)扎實(shí)的技術(shù)支持、優(yōu)質(zhì)高效的服務(wù)意識(shí)和豐厚的資源優(yōu)勢(shì),提供專(zhuān)業(yè)的網(wǎng)站策劃、網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、網(wǎng)站優(yōu)化、軟件開(kāi)發(fā)、網(wǎng)站改版等服務(wù),在成都10余年的網(wǎng)站建設(shè)設(shè)計(jì)經(jīng)驗(yàn),為成都1000多家中小型企業(yè)策劃設(shè)計(jì)了網(wǎng)站。
截至 Python 3.6.6,concurrent.futures.ThreadPoolExecutor 中用的都是無(wú)·界隊(duì)列,在生產(chǎn)速度大于消費(fèi)速度時(shí),可能會(huì)耗光系統(tǒng)資源,希望找到一種方式避免這種情況。
【方案一】
繼承 ThreadPoolExecutor,直接修改 _work_queue 為有界隊(duì)列。
優(yōu)點(diǎn):簡(jiǎn)單粗暴直接。
缺點(diǎn):修改了私有屬性。
示例:https://stackoverflow.com/a/48327162
【方案二】
將任務(wù)分組,每組完成后再提交下一組。
優(yōu)點(diǎn):無(wú)需繼承,不改變私有屬性;能切實(shí)有效的避免資源耗費(fèi)。
缺點(diǎn):組之間的任務(wù)是同步的,未充分利用線程,即使有剩余任務(wù)也有空閑線程存在。
示例:https://stackoverflow.com/a/49622149
【方案三】
創(chuàng)建工具類(lèi)委托給 ThreadPoolExecutor 實(shí)例。
優(yōu)點(diǎn):無(wú)需繼承,不改變私有屬性;充分利用了線程,有剩余任務(wù)時(shí)不會(huì)有空閑線程存在。
缺點(diǎn):實(shí)現(xiàn)較為復(fù)雜。
示例:https://www.bettercodebytes.com/theadpoolexecutor-with-a-bounded-queue-in-python/
【相關(guān)閱讀】
Python3并發(fā)檢驗(yàn)代理池地址
*** walker ***