国产成人精品亚洲777人妖,欧美日韩精品一区视频,最新亚洲国产,国产乱码精品一区二区亚洲

您的位置:首頁技術文章
文章詳情頁

解決Python 進程池Pool中一些坑

瀏覽:49日期:2022-06-26 11:34:47
1 from multiprocessing import Pool,Queue。

其中Queue在Pool中不起作用,具體原因未明。

解決方案:

如果要用Pool創建進程,就需要使用multiprocessing.Manager()中的Queue,

與multiprocessing中的Queue不同

q=Manager().Queue()#Manager中的Queue才能配合Poolpo = Pool() # 無窮多進程2 使用進程池,在進程中調用io讀寫操作。例如:

p=Pool()q=Manager().Queue()with open(’/home/cctv/data/stage_file/stage_{}.txt’.format(int(time.time())), ’w’) as w1: p.apply_async(write_json, args=(video_path, 0,0.6,w1,q,i[0],))

這樣也不會完成進程,只能把w放到具體的函數里面,不能通過參數調用

補充:python3進程池pool使用及注意事項

1.在python中使用進程池主要就是為了并行處理任務,縮短運行時間

2.經常使用方法: 同步有 apply(), map();異步的有 apply_async(), map_async()

3. 先看幾個小例子

import time from multiprocessing import Pool test = [1,2,3,4,5,6,7,8]def run(fn): time.sleep(1) return fn*fns = time.time()for i in test: run(i)e = time.time()print(’直接循環 執行時間:’,e - s)pool = Pool(8)s = time.time()for i in test: pool.apply(run, (i,))e = time.time()print(’apply 執行時間:’,e - s)pool1 = Pool(8)s = time.time()res = []for i in test: r = [pool1.apply_async(run, (i,))] res.append(r)pool1.close()pool1.join()e = time.time()print([i.get() for i in r])print(’apply_async 執行時間:’,e - s) pool2 = Pool(8)r = pool2.map(run,test)pool2.close()pool2.join() e1 = time.time()print(r)print(’map執行時間:’,e1 - e)pool3 = Pool(8)pool3.map_async(run,test)pool3.close()pool3.join() e1 = time.time()print(’map_async執行時間:’,e1 - e)

執行結果

直接循環 執行時間: 8.004754781723022apply 執行時間: 8.016774654388428[64]apply_async 執行時間: 1.1128439903259277[1, 4, 9, 16, 25, 36, 49, 64]map執行時間: 1.181443452835083map_async執行時間: 2.3679864406585693

除此之外,在寫代碼中,還涉及到變量的一些問題。就需要加鎖~

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持好吧啦網。如有錯誤或未考慮完全的地方,望不吝賜教。

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 塔河县| 博客| 沾化县| 黄陵县| 荣昌县| 休宁县| 铁岭县| 陇南市| 织金县| 霞浦县| 鲁甸县| 永登县| 抚州市| 长宁县| 科技| 运城市| 黄骅市| 嵊州市| 双辽市| 桐柏县| 中方县| 灵川县| 会昌县| 绍兴县| 喀喇沁旗| 白水县| 绩溪县| 香港| 香河县| 武清区| 厦门市| 津市市| 寻乌县| 双峰县| 富源县| 得荣县| 谷城县| 越西县| 蕉岭县| 武宣县| 凤台县|