[英]weird behavior of multiprocessing scipy optimization inside of a function
这是一个运行良好的简单代码。 即使函数最小化包装了 scipy.optimize.minimize 它也不会抱怨酸洗
import numpy as np
from scipy import optimize
from multiprocessing import Pool
def square(x):
return np.sum(x**2+ 2*x)
def minimize(args):
f,x = args
res = optimize.minimize(f, x, method = 'L-BFGS-B')
return res.x
x = np.random.rand(8,10)
args = [(square,x[i]) for i in range(8)]
p = Pool(8)
p.map(minimize,args)
但是,如果尝试以下操作,则会因酸洗错误而失败
PicklingError: Can't pickle <type 'function'>: attribute lookup __builtin__.function failed
def run():
def square(x):
return np.sum(x**2+ 2*x)
def minimize(args):
f,x = args
res = optimize.minimize(f, x, method = 'L-BFGS-B')
return res.x
x = np.random.rand(8,10)
args = [(square,x[i]) for i in range(8)]
p = Pool(8)
p.map(minimize,args)
run()
我想制作一个模块来使用 scipy 最小化与许多初始猜测群体并行。 但是,如示例所示,当我将其设为模块时,它失败了。
问题是 Python 不能腌制嵌套函数,在您的第二个示例中,您试图将嵌套的minimize
和square
函数传递给您的子进程,这需要腌制。
如果没有理由必须嵌套这两个函数,将它们移到模块的顶层将解决问题。 您还可以查看此问题以了解腌制嵌套函数的技术。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.