def search_lam_double(lam0, lam_min, lam_max,sse,mid,dl_chg_pct=10,num_jobs=4): from multiprocessing.pool import ThreadPool pool=ThreadPool(processes=num_jobs) res=[] lam=lam_min lam_list=[] while lam<lam_max: l0=max(lam0,lam) l1=min(lam0,lam) if l0/l1>=1.5: lam_list.append(lam) res.apend(pool.appy_async(eval_lam,([lam0,lam],sse,mid))) lam*=(1.0+float(dl_chg_pct)/100.0) param=[] for lam0,res0 in zip(lam_list,res): lgp,a,U=res0.get() param.append([lam0,lgp,a,U]) return param