本文實例講述了Python多進程池 multiprocessing Pool用法。分享給大家供大家參考,具體如下:
1. 背景
由于需要寫python程序, 定時、大量發送htttp請求,并對結果進行處理。
參考其他代碼有進程池,記錄一下。
2. 多進程 vs 多線程
盡管Python完全支持多線程編程, 但是解釋器的C語言實現部分在完全并行執行時并不是線程安全的。
實際上,解釋器被一個全局解釋器鎖保護著,它確保任何時候都只有一個Python線程執行。
GIL最大的問題就是Python的多線程程序并不能利用多核CPU的優勢 (比如一個使用了多個線程的計算密集型程序只會在一個單CPU上面運行)。
3. multiprocessing pool使用例子
對Pool對象調用join()方法會等待所有子進程執行完畢,調用join()之前必須先調用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"
運行結果:
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
(3, 3)
(3, 4)
(4, 3)
(4, 4)
(5, 3)
(5, 4)
end
希望本文所述對大家Python程序設計有所幫助。
新聞熱點
疑難解答