1年後、やっと欲しいものを手に入れることができました。
1)別のCPUでやりたいことで関数を作成します。ここでは、!
魔法の ipython コマンドを使用して bash からスクリプトを呼び出すだけです。私はそれがcall()
関数で動作すると思います。
def my_func(my_file):
!python pgm.py {my_file}
{}
ご利用の際はお忘れなく!
へのパスは絶対パスである必要があることにも注意してくださいmy_file
。クラスターは、ノートブックを開始した場所 (jupyter notebook
またはを実行するとき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
IPython 2.3.1
私はまだ を持っていることにも注意してくださいJupyter
。
編集: 引き続き Jupyter で動作します。相違点と発生する可能性がある潜在的な問題については、こちらを参照してください。
関数で外部ライブラリを使用する場合は、次のように別のエンジンにインポートする必要があることに注意してください。
%px import numpy as np
また
%%px
import numpy as np
import pandas as pd
変数やその他の関数と同様に、それらをエンジンの名前空間にプッシュする必要があります。
rc[:].push(dict(
foo=foo,
bar=bar))