2016-09-05 22 views
0

をしない私は、私が働いているタスクをparallizeするために、ライブラリをマルチプロセッシングのpythonを使用しようとしています:パイソン - マルチプロセッシングpool.map():プロセスは何も

import multiprocessing as MP 

def myFunction((x,y,z)): 
    ...create a sqlite3 database specific to x,y,z 
    ...write to the database (one DB per process) 

y = 'somestring' 
z = <large read-only global dictionary to be shared> 

jobs = [] 
for x in X: 
    jobs.append((x,y,z,)) 

pool = MP.Pool(processes=16) 
pool.map(myFunction,jobs) 
pool.close() 
pool.join() 

シックスティーンのプロセスは次のように開始されhtopに記載されていますが、エラーは返されず、ファイルが書き込まれず、CPUも使用されません。

myFunctionにSTDOUTに報告されず実行をブロックするエラーが発生することはありますか?

おそらく、pythonスクリプトがバックグラウンドで実行されているbashスクリプトから呼び出されることが関係します。

+0

「jobs.append((x、y、z、))」に余分な "、"を入れましたか? – Yaron

+0

関数の定義で: 'def myFunction((x、y、z)):'は余分な括弧ですか? –

+0

私はそれをタプルにすると思っていました... –

答えて

1

ここで学んだ教訓は、コメントの1つで提案された戦略に従い、すべてが機能するまでmultiprocessing.dummyを使用することでした。

私の場合、少なくともエラーは表示されず、プロセスは何も起こっていないかのように実行されていました。

+0

2つのデータセットそれは完全に機能します。別の(非常に大きい)スレッドでは、スレッドで動作しますが、前述のプロセスと同じ問題が発生します。サイズの制限がありますか?メモリがあふれていなかった... –

関連する問題