错误状态描述:单线程运行时,没有任何错误,多线程运行时,时不时收到SystemError: null argument to internal routine。通过traceback确认是optimize.leastsq的问题!
SystemError: null argument to internal routine
Traceback (most recent call last):
File “autoflow/look_alike.py”, line 175, in choose
delta1 = math_utils.least2_coef(xlist, ylist, p0=1, mode=1)[0]
File “utils/math_utils.py”, line 39, in least2_coef
plesq = optimize.leastsq(residuals, p0, args=(np.array(ylist), np.array(xlist)))
File “/usr/local/lib/python2.7/site-packages/scipy/optimize/minpack.py“, line 387, in leastsq
gtol, maxfev, epsfcn, factor, diag)
error: Internal error constructing argument list.
参考下面几篇资料,基本可以确定是scipy.optimize中的方法不是线程安全的,具体导致leastsq挂掉的原因有可能最终能追溯到curve_fit。根据stackoverflow中的说法,加一个线程锁应该可以解决问题。