欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python多進(jìn)程池 multiprocessing Pool用法示例

 更新時(shí)間:2018年09月07日 14:04:03   作者:旭東的博客  
這篇文章主要介紹了Python多進(jìn)程池 multiprocessing Pool用法,結(jié)合實(shí)例形式分析了多進(jìn)程池 multiprocessing Pool相關(guān)概念、原理及簡(jiǎn)單使用技巧,需要的朋友可以參考下

本文實(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語(yǔ)言實(shí)現(xiàn)部分在完全并行執(zhí)行時(shí)并不是線程安全的。
實(shí)際上,解釋器被一個(gè)全局解釋器鎖保護(hù)著,它確保任何時(shí)候都只有一個(gè)Python線程執(zhí)行。
GIL最大的問(wèn)題就是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-8
import logging
import time
from multiprocessing import Pool
logging.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 point
def fun2(x):
  time.sleep(1)
  logging.info(time.ctime() + ", fun2 input x:" + str(x))
  return x * x
if __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的全局鎖問(wèn)題

更多關(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常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總

希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

最新評(píng)論