本文實(shí)例講述了Python多進(jìn)程池 multiprocessing Pool用法。分享給大家供大家參考,具體如下:
1. 背景
由于需要寫python程序, 定時(shí)、大量發(fā)送htttp請(qǐng)求,并對(duì)結(jié)果進(jìn)行處理。
參考其他代碼有進(jìn)程池,記錄一下。
2. 多進(jìn)程 vs 多線程
c++程序中,單個(gè)模塊通常是單進(jìn)程,會(huì)啟動(dòng)幾十、上百個(gè)線程,充分發(fā)揮機(jī)器性能。(目前c++11有了std::thread編程多線程很方便,可以參考我之前的博客) shell腳本中,都是多進(jìn)程后臺(tái)執(zhí)行。({ ...} &, 可以參考我之前的博客,實(shí)現(xiàn)shell并發(fā)處理任務(wù)) python腳本有多線程和多進(jìn)程。由于python全局解鎖鎖的GIL的存在,一般建議 CPU密集型應(yīng)該采用多進(jìn)程充分發(fā)揮多核優(yōu)勢(shì),I/O密集型可以采用多線程。盡管Python完全支持多線程編程, 但是解釋器的C語言實(shí)現(xiàn)部分在完全并行執(zhí)行時(shí)并不是線程安全的。
實(shí)際上,解釋器被一個(gè)全局解釋器鎖保護(hù)著,它確保任何時(shí)候都只有一個(gè)Python線程執(zhí)行。
GIL最大的問題就是Python的多線程程序并不能利用多核CPU的優(yōu)勢(shì) (比如一個(gè)使用了多個(gè)線程的計(jì)算密集型程序只會(huì)在一個(gè)單CPU上面運(yùn)行)。
3. multiprocessing pool使用例子
對(duì)Pool對(duì)象調(diào)用join()
方法會(huì)等待所有子進(jìn)程執(zhí)行完畢,調(diào)用join()
之前必須先調(diào)用close()
,讓其不再接受新的Process了
#coding=utf-8import loggingimport timefrom multiprocessing import Poollogging.basicConfig(level=logging.INFO, filename='logger.log')class Point: def __init__(self, x = 0, y= 0): self.x = x self.y = y def __str__(self): return "(%d, %d)" % (self.x, self.y)def fun1(point): point.x = point.x + 3 point.y = point.y + 3 time.sleep(1) return pointdef fun2(x): time.sleep(1) logging.info(time.ctime() + ", fun2 input x:" + str(x)) return x * xif __name__ == '__main__': pool = Pool(4) #test1 mylist = [x for x in range(10)] ret = pool.map(fun2, mylist) print ret #test2 mydata = [Point(x, y) for x in range(3) for y in range(2)] res = pool.map(fun1, mydata) for i in res: print str(i) #end pool.close() pool.join() print "end"
運(yùn)行結(jié)果:
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
(3, 3)
(3, 4)
(4, 3)
(4, 4)
(5, 3)
(5, 4)
end
4. 參考
Python 多進(jìn)程 multiprocessing.Pool類詳解
Python 多線程和多進(jìn)程編程總結(jié)
Python的全局鎖問題
更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python進(jìn)程與線程操作技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進(jìn)階經(jīng)典教程》、《Python+MySQL數(shù)據(jù)庫(kù)程序設(shè)計(jì)入門教程》及《Python常見數(shù)據(jù)庫(kù)操作技巧匯總》
新聞熱點(diǎn)
疑難解答
圖片精選