[問題] 使用multiprocessing的計算結果傳值問題

看板Python作者 (metrics is everything@@)時間2年前 (2021/09/02 14:21), 編輯推噓1(104)
留言5則, 3人參與, 2年前最新討論串1/1
各位請問(我直接貼code了), --- import numpy as np,numpy_financial as npf import multiprocessing as mp def calc_irr(cf,ans,j): ans[j]=npf.irr(cf[j]) return r=0.9 u=np.array([1]*5) cf=np.float32(np.array([[0,2,3,4,5,6],[0,1,2,3,4,5],[0,5,4,3,2,1],[0,7,6,5,4,3]])) cf[:,0]=-r*cf[:,1:].dot(u.transpose()) ans_irr=[0.]*len(cf) with mp.Pool(8) as pool: for j in range(len(cf)): pool.apply_async(calc_irr,args=(cf,ans_irr,j)) pool.close() pool.join() print(ans_irr) --- 以上是已經簡化過的例子, 我實際的例子是要算大量的irr,因此我想到用multiprocessing 可是,我好像無法把計算irr的結果存進ans_irr且帶出來? (但是我若自己直接執行 calc_irr,如: calc_irr(cf,ans_irr,0),我是可以在ans_irr[0]看到計算結果的。 請問,我可以怎麼做,讓irr結果被存下來? 謝謝~~ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 49.159.178.43 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1630563682.A.DCF.html

09/02 14:32, 2年前 , 1F
Process 會開新的儲存空間,你要return 回來
09/02 14:32, 1F

09/02 14:32, 2年前 , 2F
如果要access原本的空間,查一下我記得multiprocessin
09/02 14:32, 2F

09/02 14:32, 2年前 , 3F
g 可以share memory 的
09/02 14:32, 3F

09/02 15:56, 2年前 , 4F
09/02 15:56, 4F

09/03 13:15, 2年前 , 5F
請學習: "Inter-Process Communication"
09/03 13:15, 5F
文章代碼(AID): #1XC6rYtF (Python)