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

首頁 > 編程 > Python > 正文

淺談python3.x pool.map()方法的實質(zhì)

2020-02-16 00:41:56
字體:
供稿:網(wǎng)友

我使用多進程的一般方式,都是multiprocessing模塊中的Pool.map()方法。下面寫一個簡單的示例和解析。至于此種方法使用多進程的效率問題,還希望大佬予以指正。

示例:

"""探索pool.map多進程執(zhí)行方式的實質(zhì)"""from multiprocessing import Poolfrom time import sleepfrom datetime import datetimeclass forMap:  def __init__(self):    self.name = '沒啥用的初始化'  def forPrinit(self, i):    sleep(i)    print(i)    return i ** 2

基本的代碼已經(jīng)寫好,下面看看怎么使用多進程去執(zhí)行。

執(zhí)行示例1:

if __name__ == '__main__':  s = datetime.now()  tt = forMap()  # 進程池中創(chuàng)建兩個進程,調(diào)用計算機的兩個內(nèi)核去幫我做事。  p = Pool(2)  l = [2, 4, 6]  rList = p.map(tt.forTest, l)  print(rList)  p.close()  p.join()  e = datetime.now()  print('多進程執(zhí)行時間:', e - s)

運行結(jié)果:

2
4
6
[4, 16, 36]
多進程執(zhí)行時間: 0:00:08.191251

由于在進程池中創(chuàng)建了兩個進程,所以代碼會調(diào)用計算機的兩個內(nèi)核。而列表l中的三個元素中的前兩個(“2”和“4”),會依次傳入函數(shù)中,由計算機內(nèi)核A和B去執(zhí)行。當某一個內(nèi)核執(zhí)行完,會繼續(xù)接收下一個傳入?yún)?shù)“6”函數(shù)。而且內(nèi)核A執(zhí)行的函數(shù),只會sleep兩秒,所以,傳入?yún)?shù)“6”的函數(shù)會由內(nèi)核A去執(zhí)行。所以A一共執(zhí)行了2 + 6 為8秒,又由于是并行,所以總的執(zhí)行時間是8秒(多的那零點幾是初始化、賦值、打印等操作)。

執(zhí)行示例2:

if __name__ == '__main__':  s = datetime.now()  tt = forMap()  # 進程池中創(chuàng)建三個進程  p = Pool(3)  l = [2, 4, 6]  rList = p.map(tt.forTest, l)  print(rList)  p.close()  p.join()  e = datetime.now()  print('多進程執(zhí)行時間:', e - s)

執(zhí)行結(jié)果:

2
4
6
[4, 16, 36]
多進程執(zhí)行時間: 0:00:06.273263

創(chuàng)建了三個進程 ,并行執(zhí)行,所以執(zhí)行時間是6秒

執(zhí)行示例3:

if __name__ == '__main__':  s = datetime.now()  tt = forMap()  # 進程池中創(chuàng)建三個進程  p = Pool(3)  l = [2, 4, 6, 8]  rList = p.map(tt.forTest, l)  print(rList)  p.close()  p.join()  e = datetime.now()  print('多進程執(zhí)行時間:', e - s)

執(zhí)行結(jié)果:

2
4
6
8
[4, 16, 36, 64]
多進程執(zhí)行時間: 0:00:10.211451

在列表中添加一個元素,首先內(nèi)核A、B、C分別執(zhí)行2, 4, 6。A先結(jié)束,所以8也會由A來執(zhí)行。

執(zhí)行示例4:

if __name__ == '__main__':  s = datetime.now()  tt = forMap()  # 進程池中創(chuàng)建三個進程  p = Pool(2)  l = [2, 4, 8, 6]  rList = p.map(tt.forTest, l)  print(rList)  p.close()  p.join()  e = datetime.now()  print('多進程執(zhí)行時間:', e - s)            
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 巴南区| 政和县| 东港市| 修武县| 吴忠市| 多伦县| 永寿县| 天台县| 仙桃市| 宣武区| 凯里市| 渭源县| 巫山县| 五莲县| 丽水市| 长白| 花垣县| 宁德市| 格尔木市| 兴城市| 寿阳县| 久治县| 栾川县| 霸州市| 灵川县| 延川县| 灌南县| 永胜县| 兰州市| 康乐县| 镇宁| 阳原县| 康平县| 土默特右旗| 涪陵区| 盱眙县| 肥东县| 太湖县| 凤凰县| 太和县| 保德县|