Python 通过多个核心运行scipy.odeint
我正在使用Python2.7在Jupyter(Anaconda)中工作 我试图得到一个我写过多次运行的odeint函数,但是它需要花费大量的时间 当我试图找出如何减少运行时间时,我意识到当我运行它时,它只占我CPU的12%左右 我使用Intel Core i7-3740QM在2.70GHz下运行: 所以,我假设这是因为Python的GIL导致我的脚本只运行了一个内核 在对Python中的并行处理进行了一些研究之后,我想我通过使用以下代码找到了答案:Python 通过多个核心运行scipy.odeint,python,parallel-processing,scipy,jupyter,odeint,Python,Parallel Processing,Scipy,Jupyter,Odeint,我正在使用Python2.7在Jupyter(Anaconda)中工作 我试图得到一个我写过多次运行的odeint函数,但是它需要花费大量的时间 当我试图找出如何减少运行时间时,我意识到当我运行它时,它只占我CPU的12%左右 我使用Intel Core i7-3740QM在2.70GHz下运行: 所以,我假设这是因为Python的GIL导致我的脚本只运行了一个内核 在对Python中的并行处理进行了一些研究之后,我想我通过使用以下代码找到了答案: import sys import mult
import sys
import multiprocessing as mp
Altitude = np.array([[550],[500],[450],[400],[350],[300]])
if __name__ == "__main__":
processes = 4
p = mp.Pool(processes)
mp_solutions = p.map(calc, Altitude)
但这似乎不起作用。一旦我运行它,Jupyter就会变得非常忙碌。我的第一个想法是,这只是一个高计算级别,因此需要花费很长时间,但随后我查看了我的CPU使用情况,尽管有多个Python进程实例,但它们都没有使用任何CPU
我搞不懂这是什么原因。我也找到了这篇文章,并尝试使用他们的代码,但它只是做了同样的事情:
任何帮助都将不胜感激
谢谢 你试过从终端而不是从Jupyter运行它吗?可能是你的数组的形状混淆了
地图
,你能重构你的代码,这样你就只需要输入一个简单的列表,比如海拔高度=[550500450400350300]
@Warren Weckesser正是我要找的人。我本来会对原来的帖子发表评论,但我没有代表。这完全奏效了。谢谢你的建议。我一开始就应该试试。为什么你认为它只在终端有效而不在Jupyter?我的建议就是解决这个问题。我认为真正的问题是为什么它在jupyter中不起作用,而这并没有一个答案。也许jupyter专家会来解决这个问题……您可能想用“jupyter”标记替换“function”标记(这似乎毫无意义)。