我希望能够在Python中使用多个CPU对函数进行数值积分。我的期望是执行以下操作:
from scipy.integrate import quad
import multiprocessing
def FanDDW(arguments):
wtq,eigq_files,DDB_files,EIGR2D_files,FAN_files = arguments
...
return tot_corr
# Numerical integration
def integration(frequency):
# Parallelize the work over cpus
pool = multiprocessing.Pool(processes=nb_cpus)
total = pool.map(FanDDW, zip(wtq,eigq_files,DDB_files,EIGR2D_files,FAN_files))
FanDDW_corr = sum(total)
return quad(FanDDW, -Inf, Inf, args=(zip(wtq,eigq_files,DDB_files,EIGR2D_files,FAN_files)))[0]
vec_functionint = vectorize(integration)
vec_functionint(3,arange(1.0,4.0,0.5))
此外,“频率”是一个全局变量(不属于FanDDW(arguments))。它是一个包含函数必须评估的位置的向量。我认为quad应该以聪明的方式选择频率。如何将其传递给FanDDW,知道它不应分配在CPU之间,并且pool.map确实会这样做(这就是为什么我将它作为全局变量而不是将其传递给定义作为参数的原因)。
感谢您的任何帮助。
萨缪尔。