関数を並列子プロセスとして呼び出すPythonスクリプトを実行できるかどうか知りたいです。これらの用語を正しく使用しているかどうかわからないので、これが私が話していることを実行するbashスクリプトから作成されたコンセプトスクリプトです。
import Zfunctions as Z
reload(Z)
def Parallel():
statements
calls to other functions in a general function file Z
#--------------
if '__name__' == '__main__':
# Running this script in a linux cluster with 8 processing node available
Parallel() & #1st process sent to 1st processing node
Parallell() & #2nd process sent to 2nd node
.
.
.
Parallell() & #8th process sent to 8th node
wait
ここでアンパサンド(&)と「待機」が間違っていることがわかりましたが、bashでは、プロセスをバックグラウンドに送信し、これらのプロセスが終了するのを待つ方法です。私の質問は今、うまくいけばより明確になりました:これはPythonで行うことができますか?もしそうならどのように?
どんな助けでも大歓迎です。
/ M
私はいくつかの良い助けを得ました。上記の質問で、大量のデータを処理して結果をディスクに書き込む60個のジョブを実行しようとするこの変更をテストしました。これはすべて、2つのforループと一連の内部関数呼び出しを組み合わせた単一のPythonファイルに含まれています。スクリプトは失敗し、エラー出力は以下のとおりです。
import multiprocessing
def Parallel(m,w,PROCESSES):
plist = {}
plist['timespan'] = '2007-2008'
print 'Creating pool with %d processes\n' % PROCESSES
pool = multiprocessing.Pool(PROCESSES)
print 'pool = %s' % pool
TASKS = [(LRCE,(plist,m,w)),(SRCE,(plist,m,w)),(ALBEDO,(plist,m,w)),
(SW,(plist,m,w)),(RR,(plist,m,w)),(OLR,(plist,m,w)),(TRMM,(plist,w)),
(IWP,(plist,m,w)),(RH,(plist,'uth',m,w)),(RH,(plist,200,m,w)),
(RH,(plist,400,m,w)),(IWC,(plist,200,m,w)),(IWC,(plist,400,m,w)),
(CC,(plist,200,m,w)),(CC,(plist,400,m,w))]
results = [pool.apply_async(calculate,t) for t in TASKS]
print 'Ordered results using pool.apply_async():'
for r in results:
print '\t', r.get()
#-----------------------------------------------------------------------------------
if __name__ == '__main__':
PROCESSES = 8
for w in np.arange(2):
for m in np.arange(2):
Parallel(m,w,PROCESSES)
####クラスターからのエラーメッセージ
スレッドスレッド3の例外:トレースバック(最後の最後の呼び出し):ファイル "/software/apps/python/2.7.2-smhi1/lib/python2.7/threading.py"、行552、bootstrap_inner self.run( )ファイル "/software/apps/python/2.7.2-smhi1/lib/python2.7/threading.py"、行505、実行中self .__ target(* self .__ args、** self .__ kwargs)ファイル "/ software / apps / python / 2.7.2-smhi1 / lib / python2.7 / multiprocessing / pool.py "、313行目、_handle_tasks put(task)PicklingError:ピクルスできません:属性ルックアップ__builtin.functionが失敗しました