一年后,我终于得到了我想要的。
1)创建一个函数,用于在不同的 cpu 上执行您想要执行的操作。这里它只是从 bash 调用一个脚本!
神奇的 ipython 命令。我想这会与call()
功能。
def my_func(my_file):
!python pgm.py {my_file}
不要忘记{}
使用时!
另请注意,路径my_file
应该是绝对的,因为集群是您启动笔记本的位置(当执行jupyter notebook
or ipython notebook
)这不一定是你所在的地方。
2)使用您想要的 CPU 数量启动您的 ipython 笔记本集群。
等待 2 秒并执行以下单元格:
from IPython import parallel
rc = parallel.Client()
view = rc.load_balanced_view()
3)获取您要处理的文件列表:
files = list_of_files
4)将您的函数与所有文件异步映射到view
您刚刚创建的引擎。 (不确定措辞)。
r = view.map_async(my_func, files)
当它运行时,您可以在笔记本上执行其他操作(它运行在“背景“!)。您也可以致电r.wait_interactive()
以交互方式枚举已处理的文件数、到目前为止花费的时间以及剩余的文件数。这将阻止您运行其他单元(但您可以中断它)。
如果您的文件多于引擎,不用担心,一旦引擎完成 1 个文件,它们就会被处理。
希望这会帮助其他人!
本教程可能会有所帮助:
http://nbviewer.ipython.org/github/minrk/IPython-parallel-tutorial/blob/master/Index.ipynb http://nbviewer.ipython.org/github/minrk/IPython-parallel-tutorial/blob/master/Index.ipynb
另请注意,我仍然有IPython 2.3.1
, 不知道以后有没有改变Jupyter
.
编辑:仍然适用于 Jupyter,请参阅此处了解您可能遇到的差异和潜在问题 https://stackoverflow.com/questions/32759056/fail-to-import-ipython-parallel-in-jupyter
请注意,如果您在函数中使用外部库,则需要使用以下命令将它们导入到不同的引擎上:
%px import numpy as np
or
%%px
import numpy as np
import pandas as pd
与变量和其他函数一样,您需要将它们推送到引擎名称空间:
rc[:].push(dict(
foo=foo,
bar=bar))