使用multiprocessing簡單封裝一個多程序方法,方便呼叫
阿新 • • 發佈:2019-02-08
首先,眾所周知多執行緒在python中可能不像其他語言中那麼有效,所以,用的比較多的還是多程序的方法,而multiprocessing庫則給我們提供了很方便的多程序管理方法。
話不多說,程式碼量不大,也不也不難理解,直接上程式碼
from multiprocessing import Pool,Queue import time class MultiProcessingUtils: def __init__(self,processCount,function,taskList): # 程序數,建議取cpu_count self.processCount=processCount #執行的方法 self.function=function #待執行的任務列表 self.taskList=taskList def run(self): count=self.processCount q = Queue() p = Pool(count) for item in self.taskList: q.put(item) time1 = time.time() while q.qsize() > 0: for i in range(count): p.apply_async(self.function, args=(q.get(),)) p.close() p.join() time2 = time.time() print('---------------耗時:{}--------------'.format(time2 - time1))
大體思想就是,使用程序池建立幾個程序,再迴圈佇列中的值,給方法進行呼叫,簡單的上一段測試程式碼吧!
def fun(item):
print('-----------------------------:{}'.format(item))
time.sleep(random.random())
if __name__ == '__main__':
list=[]
for i in range(1000):
list.append(i)
m=MultiProcessingUtils(10,fun,list)
m.run()
這裡使用的是十個程序,建議還是以電腦的核心數為準,減少資源排程出錯的可能性。
最後打印出結果:
-----------------------------:993 -----------------------------:994 -----------------------------:995 -----------------------------:996 -----------------------------:997 -----------------------------:998 -----------------------------:999 ---------------耗時:50.96454930305481-------------- Process finished with exit code 0
耗時51秒左右,可以看出,測試案例只是個很簡單的方法,就是列印數字後隨機sleep一秒內。如果在單程序中,可以計算出預期耗時應為500秒,而在此處十個程序的情況下僅用時51秒,可以看出多程序確實能夠減少不少的工具時間,當我們再爬取網站時,合理的分配任務,以及程序排程能夠減少爬取的時間,當然,要做一隻友好的爬蟲。