国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 文昌市| 栾城县| 昌邑市| 郁南县| 富平县| 双流县| 岫岩| 和平区| 密云县| 葫芦岛市| 浦东新区| 耿马| 甘孜县| 兴隆县| 安陆市| 天等县| 宝鸡市| 张家界市| 黑河市| 昌平区| 盈江县| 长武县| 吴堡县| 页游| 青河县| 宜宾市| 古丈县| 泊头市| 巴塘县| 大安市| 张家界市| 汕尾市| 顺平县| 射洪县| 花莲县| 尼玛县| 利川市| 黔东| 成都市| 西乌珠穆沁旗| 布尔津县|