jrj*_*rjc 4 parallel-processing ipython ipython-notebook ipython-parallel jupyter
我正在尝试使用ipython并行库中的并行计算。但是我对此几乎一无所知,而且我发现很难从对并行计算一无所知的人那里阅读该文档。
有趣的是,我发现的所有教程都只是重复使用该文档中的示例,并且具有相同的解释,按照我的观点,这是没有用的。
基本上我想做的是在后台运行几个脚本,以便它们可以同时执行。在bash中,它将类似于:
for my_file in $(cat list_file); do
python pgm.py my_file &
done
Run Code Online (Sandbox Code Playgroud)
但是Ipython notebook的bash解释器无法处理后台模式。
看来解决方案是使用ipython的并行库。
我试过了 :
from IPython.parallel import Client
rc = Client()
rc.block = True
dview = rc[:2] # I take only 2 engines
Run Code Online (Sandbox Code Playgroud)
但是后来我被困住了。我不知道如何同时运行同一脚本或pgm两次(或多次)。
谢谢。
一年后,我终于设法得到了想要的东西。
1)创建一个函数,该函数具有您要在其他cpu上执行的操作。在这里,它只是使用!
魔术ipython命令从bash调用脚本。我想它将与该call()
功能一起使用。
def my_func(my_file):
!python pgm.py {my_file}
Run Code Online (Sandbox Code Playgroud)
{}
使用时不要忘记!
另请注意,to的路径my_file
应为绝对路径,因为群集是您启动笔记本电脑的位置(执行jupyter notebook
或时ipython notebook
),而不一定位于您所在的位置。
2)使用所需的CPU数量启动ipython Notebook群集。等待2s并执行以下单元格:
from IPython import parallel
rc = parallel.Client()
view = rc.load_balanced_view()
Run Code Online (Sandbox Code Playgroud)
3)获取要处理的文件列表:
files = list_of_files
Run Code Online (Sandbox Code Playgroud)
4)将所有文件的函数异步映射到view
刚创建的引擎。(不确定措词)。
r = view.map_async(my_func, files)
Run Code Online (Sandbox Code Playgroud)
在运行时,您可以在笔记本上执行其他操作(它在“ 后台 ”中运行!)。您还可以调用r.wait_interactive()
,该方法以交互方式枚举处理的文件数,到目前为止所花费的时间以及剩余的文件数。这将阻止您运行其他单元(但是您可以中断它)。
而且,如果您的文件多于引擎,则无需担心,引擎完成1个文件后,它们将立即得到处理。
希望这对别人有帮助!
本教程可能会有所帮助:
http://nbviewer.ipython.org/github/minrk/IPython-parallel-tutorial/blob/master/Index.ipynb
还要注意我仍然有IPython 2.3.1
,我不知道从那之后它是否改变了Jupyter
。
编辑:仍可与Jupyter一起使用,请参见此处了解您可能遇到的差异和潜在问题
请注意,如果在函数中使用外部库,则需要使用以下命令将它们导入不同的引擎:
%px import numpy as np
Run Code Online (Sandbox Code Playgroud)
要么
%%px
import numpy as np
import pandas as pd
Run Code Online (Sandbox Code Playgroud)
与变量和其他函数相同,您需要将它们推送到引擎名称空间:
rc[:].push(dict(
foo=foo,
bar=bar))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3661 次 |
最近记录: |