自定义内核在ipyp中运行时挂起

2024-09-29 18:10:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将ipyparallel与我在conda env中安装的自定义内核一起使用。我的工具是用matplotlib 2.0.2构建的。我在Jupyter集线器上运行,默认的Python3内核指向matplotlib1.5.3。通过这个例子,我可以从相应的引擎中看到matplotlib的版本:

import ipyparallel
import matplotlib

def myFunc(n):
    import matplotlib
    status = "mpl version=%s, and num=%d" % (matplotlib.__version__, 
                                             n * 10)
    return status

rc=ipyparallel.Client(profile='MJBtest')
all_proc = rc[:]
all_proc.block=True

print("Local: ", matplotlib.__version__)

inlist = [i for i in range(3)]
print("Now calling map_sync")
result = all_proc.map_sync(myFunc, inlist)
print("Parallel result : ", result)

它回来了

^{pr2}$

正如我所料,因为我运行的是python3默认内核。我已经构建了一个名为“cetb3”的自定义内核,方法是使用我想要的工具创建一个自定义内核,激活它,然后使用以下命令创建一个kernelspec文件:

ipython kernel install --user --name cetb3

在cetb3环境中,我可以运行python,导入matplotlib,我看到版本是matplotlib 2.0.2。在同一个cetb3环境中,我还创建了一个测试配置文件:

ipython profile create --parallel --profile=MJBtest

在Jupyter Hub中,我可以将内核切换到cetb3,导入matplotlib并查看它是否在v2.0.2。但是,当我从MJBtest启动一个集群,并尝试使用cetb3内核运行与上面相同的代码时,单元挂起在“Now calling map_sync”行之后,并且永远不会返回:

Local:  2.0.2
Now calling map_sync

我想我可能需要创建一个使用我的自定义内核的ipython概要文件,并尝试将我的概要文件的名称添加到cetb3 kernelspec文件中:“--profile=MJBtest”,但当我这样做时,内核甚至无法启动。我不清楚是否必须告诉内核我的概要文件,或者反过来(以及如何做到这一点),或者是否有其他机制将我的自定义环境推到ipyparallel引擎中。在

所以我和系统管理员一起在我们的超级计算机上工作,结果他们配置了一些自定义的ipython配置文件,这些配置文件使用ipengine命令启动引擎集群。在ipcluster中_配置.py在ipengine命令之前,我可以通过将conda env bin path添加到path env变量的开头,然后为我希望在每个引擎上可用的conda env调用source activate来指定我的自定义环境。在


Tags: 文件引擎importenvmap环境matplotlibipython

热门问题