Python 通过多个核心运行scipy.odeint

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

我正在使用Python2.7在Jupyter(Anaconda)中工作

我试图得到一个我写过多次运行的odeint函数,但是它需要花费大量的时间

当我试图找出如何减少运行时间时,我意识到当我运行它时,它只占我CPU的12%左右

我使用Intel Core i7-3740QM在2.70GHz下运行:

所以,我假设这是因为Python的GIL导致我的脚本只运行了一个内核

在对Python中的并行处理进行了一些研究之后,我想我通过使用以下代码找到了答案:

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”标记(这似乎毫无意义)。