解決Python 進(jìn)程池Pool中一些坑
1 from multiprocessing import Pool,Queue。
其中Queue在Pool中不起作用,具體原因未明。
解決方案:
如果要用Pool創(chuàng)建進(jìn)程,就需要使用multiprocessing.Manager()中的Queue,
與multiprocessing中的Queue不同
q=Manager().Queue()#Manager中的Queue才能配合Pool po = Pool() # 無窮多進(jìn)程
2 使用進(jìn)程池,在進(jìn)程中調(diào)用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],))
這樣也不會完成進(jìn)程,只能把w放到具體的函數(shù)里面,不能通過參數(shù)調(diào)用
補(bǔ)充:python3進(jìn)程池pool使用及注意事項(xiàng)
1.在python中使用進(jìn)程池主要就是為了并行處理任務(wù),縮短運(yùn)行時(shí)間
2.經(jīng)常使用方法: 同步有 apply(), map();異步的有 apply_async(), map_async()
3. 先看幾個(gè)小例子
import time from multiprocessing import Pool test = [1,2,3,4,5,6,7,8] def run(fn): time.sleep(1) return fn*fn s = time.time() for i in test: run(i) e = time.time() print('直接循環(huán) 執(zhí)行時(shí)間:',e - s) pool = Pool(8) s = time.time() for i in test: pool.apply(run, (i,)) e = time.time() print('apply 執(zhí)行時(shí)間:',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 執(zhí)行時(shí)間:',e - s) pool2 = Pool(8) r = pool2.map(run,test) pool2.close() pool2.join() e1 = time.time() print(r) print('map執(zhí)行時(shí)間:',e1 - e) pool3 = Pool(8) pool3.map_async(run,test) pool3.close() pool3.join() e1 = time.time() print('map_async執(zhí)行時(shí)間:',e1 - e)
執(zhí)行結(jié)果
直接循環(huán) 執(zhí)行時(shí)間: 8.004754781723022 apply 執(zhí)行時(shí)間: 8.016774654388428 [64] apply_async 執(zhí)行時(shí)間: 1.1128439903259277 [1, 4, 9, 16, 25, 36, 49, 64] map執(zhí)行時(shí)間: 1.181443452835083 map_async執(zhí)行時(shí)間: 2.3679864406585693
除此之外,在寫代碼中,還涉及到變量的一些問題。就需要加鎖~
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
python pcm音頻添加頭轉(zhuǎn)成Wav格式文件的方法
今天小編就為大家分享一篇python pcm音頻添加頭轉(zhuǎn)成Wav格式文件的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01PyQt5 實(shí)現(xiàn)給無邊框widget窗口添加背景圖片
這篇文章主要介紹了PyQt5 實(shí)現(xiàn)給無邊框widget窗口添加背景圖片的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03linux安裝python修改默認(rèn)python版本方法
在本文中我們給大家總結(jié)了關(guān)于linux安裝python修改默認(rèn)python版本的方法和相關(guān)知識點(diǎn),需要的讀者們參考下。2019-03-03python畫一個(gè)圣誕樹實(shí)現(xiàn)示例
這篇文章主要為大家介紹了使用python畫一個(gè)圣誕樹實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05pytorch動(dòng)態(tài)神經(jīng)網(wǎng)絡(luò)(擬合)實(shí)現(xiàn)
這篇文章主要介紹了pytorch動(dòng)態(tài)神經(jīng)網(wǎng)絡(luò)(擬合)實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03Python?imgaug庫安裝與使用教程(圖片加模糊光雨雪霧等特效)
imgaug機(jī)器學(xué)習(xí)實(shí)驗(yàn)中的圖像增強(qiáng)庫,特別是卷積神經(jīng)網(wǎng)絡(luò),支持以多種不同方式增強(qiáng)圖像、關(guān)鍵點(diǎn)/地標(biāo)、邊界框、熱圖和分割圖,這篇文章主要介紹了Python?imgaug庫?安裝與使用教程(圖片加模糊光雨雪霧等特效),需要的朋友可以參考下2022-11-11