国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python多進程池 multiprocessing Pool用法示例

2020-02-15 22:55:43
字體:
來源:轉載
供稿:網友

本文實例講述了Python多進程池 multiprocessing Pool用法。分享給大家供大家參考,具體如下:

1. 背景

由于需要寫python程序, 定時、大量發送htttp請求,并對結果進行處理。

參考其他代碼有進程池,記錄一下。

2. 多進程 vs 多線程

c++程序中,單個模塊通常是單進程,會啟動幾十、上百個線程,充分發揮機器性能。(目前c++11有了std::thread編程多線程很方便,可以參考我之前的博客) shell腳本中,都是多進程后臺執行。({ ...} &, 可以參考我之前的博客,實現shell并發處理任務) python腳本有多線程和多進程。由于python全局解鎖鎖的GIL的存在,一般建議 CPU密集型應該采用多進程充分發揮多核優勢,I/O密集型可以采用多線程。

盡管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

4. 參考

Python 多進程 multiprocessing.Pool類詳解
Python 多線程和多進程編程總結
Python的全局鎖問題

更多關于Python相關內容感興趣的讀者可查看本站專題:《Python進程與線程操作技巧總結》、《Python數據結構與算法教程》、《Python函數使用技巧總結》、《Python字符串操作技巧匯總》、《Python入門與進階經典教程》、《Python+MySQL數據庫程序設計入門教程》及《Python常見數據庫操作技巧匯總》

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 巨野县| 疏附县| 游戏| 南昌县| 商南县| 桑植县| 随州市| 岐山县| 忻州市| 广宗县| 明光市| 沈丘县| 苏尼特右旗| 新建县| 敖汉旗| 乌兰察布市| 邓州市| 云南省| 阜新市| 久治县| 枝江市| 南郑县| 南川市| 许昌县| 渝北区| 邹城市| 花垣县| 双江| 沂南县| 班玛县| 达拉特旗| 柳江县| 鱼台县| 象山县| 利辛县| 化隆| 尖扎县| 潍坊市| 仁怀市| 锦州市| 丹巴县|