代码很简单,我认为它是什么并不重要。可能是错的,我不是最好的。
我试图让scipy的差分进化函数在for循环中进行多处理。我尝试了几种方法来让它工作,但我无法理解。它似乎总是需要ifname== 'main':因为分叉的原因(我真的不知道这是什么意思,我试着在网上读到它,但我还是不明白)。然而,因为ifname== 'main':,它最终会运行整个代码很多次,我不知道为什么。我认为这与认为缩进比ifname== 'main'少的所有代码有关:begins是全局函数,需要从头开始运行,因为我的所有其他全局函数都是在递归循环中多次运行的。idk,如果你认为有帮助的话,我可以分享更多。
def voldiscovery():
alpha = .25
currentvol = currentvolcalc(hvwindow)
for y in range (16, len(logreturns)):
if __name__ == '__main__':
x = currentvol[15:y]
z = estimates[y]
args = (x, z)
bounds = [(.01, .5)]
sol1 = differential_evolution(alphaoptimizer, strategy='best1exp', maxiter=3000, init='latinhypercube', bounds=bounds, updating='deferred', workers=-1, args=args)
我试着放弃ifname== 'main':,那不起作用,我试着放进另一个函数,在for循环中调用那个函数,那绝对不起作用。
我希望对于for循环的每次迭代,它都会运行一次优化(在所有内核上),然后在for循环结束后继续轻松地运行下一段代码。
1条答案
按热度按时间umuewwlo1#
使用多重处理要求你的代码是可导入的而没有副作用。
具体来说,您应该按如下方式定义代码:
上面的模块可以在不触发应用程序执行的情况下导入,因为如果其他进程使用
spawn
启动(这基本上意味着您正在使用windows/macOS,或者您将start方法设置为在linux上生成),它们**会导入您的模块