2017-04-01 6 views
-1

共有ホスティングでマルチプロセッシングプールを使用しているスクリプトを実行しています。私は、次のエラーを取得しています:マルチプロセス。プールメモリ割り当てエラー

with closing(Pool(processes=50)) as pool: 
csv_items = pool.map(get_stuff, list_ids) 
pool.terminate() 
pool.join() 
+3

メモリが不足しているような気がします。どのくらい私たちがそれを助けることができるか分かりません。おそらくあなたのプールには少ないプロセスしか持たないようにしてください(CPUにコアがある以上に多くの利点はありません)。 – Blckknght

+0

@Blckknght私のMacでこのような問題がローカルにないため、プロバイダをホスティングすることによるある種の制限 – Volatil3

答えて

1

[OK]を、あなたはあなたのプールで使用される50個の以上のプロセスを起動しようとしている。

Errno 12] Cannot allocate memory 
(<type 'exceptions.OSError'>, 

以下は私のコードです。さて、これはスレッドと同じではありません。これは、すべてのPythonモジュールとライブラリを含む50の新しいPythonプロセスを起動します。

デフォルトでは、Poolは、通常マルチプルマルチコアマシンで考えている新しいプロセスcpu_count()を起動します。現在、新しいWorkerプロセスはすべて、プールの作業キューの全期間にわたってデフォルトで有効になります。専用のVPSインスタンスを使用する場合は、私のプールに自由に作成できるWorker Processについての予防措置を講じます。あなたの場合、共有ホスティングを使用しています。この場合、メモリの制限が大きくなり、上記のエラーメッセージが表示されます。

これを使用する場合は、共有ホスティングから専用のvps /クラウドインスタンスにデプロイメントを変更します。

+1

返信ありがとう、またはプロセス数を2または3に減らすだけですか? – Volatil3

+1

を2または3に減らしてから、これを試してから、エラーが再び発生するまで1つずつ増やしてください。 2でこれが失敗した場合、あなたの共有ホストはこれをすべて制限し、マルチプロセスのPythonは動作しません。専用のvpsに移行する必要があります。 –