1. 程式人生 > >記錄python multiprocessing Pool的map和apply_async方法

記錄python multiprocessing Pool的map和apply_async方法

遇到的問題

在學習python多程序時,程序上執行的方法接收多個引數和多個結果時遇到了問題,現在經過學習在這裡總結一下

Pool.map()多引數任務

在給map方法傳入帶多個引數的方法不能達到預期的效果,像下面這樣

def job(x ,y):
	return x * y

if __name__ == "__main__":
	pool multiprocessing.Pool()
	res = pool.map(job, 2, 3)
	print res

所以只能通過對有多個引數的方法進行封裝,在程序中執行封裝後的方法如下

def job(x ,y):
	return x * y


def
job1(z): return job(z[0], z[1]) if __name__ == "__main__": pool multiprocessing.Pool() res = pool.map(job, [(2, 3), (3, 4)]) print res

這樣就能達到傳遞多個引數的效果
ps:如果需要得到多個結果可以傳入多個元組在一個列表中

Pool.apply_async()輸出多個迭代結果

在使用apply_async()方法接收多個引數的方法時,在任務方法中正常定義多個引數,引數以元組形式傳入即可
但是給apply_async()方法傳入多個值獲取多個迭代結果時就會報錯,因為該方法只能接收一個值,所以可以將該方法放入一個列表生成式中,如下

def job(x):
    return x * x


if __name__ == "__main__":
    pool multiprocessing.Pool()
    res = [pool.apply_async(target=job, (i,)) for i in range(3)]
    print [r.get() for r int res]

python 3中提供了starmap和startmap_async兩個方法