作者HerryL (metrics is everything@@)
看板Python
标题[问题] 使用multiprocessing的计算结果传值问题
时间Thu Sep 2 14:21:16 2021
各位请问(我直接贴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://webptt.com/cn.aspx?n=bbs/Python/M.1630563682.A.DCF.html
1F:→ aassdd926: Process 会开新的储存空间,你要return 回来 09/02 14:32
2F:→ aassdd926: 如果要access原本的空间,查一下我记得multiprocessin 09/02 14:32
3F:→ aassdd926: g 可以share memory 的 09/02 14:32
5F:→ leolarrel: 请学习: "Inter-Process Communication" 09/03 13:15