主頁 > 知識(shí)庫 > 解決Python 進(jìn)程池Pool中一些坑

解決Python 進(jìn)程池Pool中一些坑

熱門標(biāo)簽:呼叫中心市場需求 Win7旗艦版 電話運(yùn)營中心 企業(yè)做大做強(qiáng) 百度AI接口 客戶服務(wù) 語音系統(tǒng) 硅谷的囚徒呼叫中心

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],))

這樣也不會(huì)完成進(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ò)誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • Python基礎(chǔ)之進(jìn)程詳解
  • python 多進(jìn)程和多線程使用詳解
  • python 實(shí)現(xiàn)多進(jìn)程日志輪轉(zhuǎn)ConcurrentLogHandler
  • Python多進(jìn)程與多線程的使用場景詳解
  • python多進(jìn)程執(zhí)行方法apply_async使用說明
  • python multiprocessing 多進(jìn)程并行計(jì)算的操作
  • python 進(jìn)程池pool使用詳解
  • Python使用多進(jìn)程運(yùn)行含有任意個(gè)參數(shù)的函數(shù)
  • 詳解python網(wǎng)絡(luò)進(jìn)程

標(biāo)簽:山西 海南 崇左 濟(jì)南 長沙 喀什 山西 安康

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《解決Python 進(jìn)程池Pool中一些坑》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266