2012-12-18 4 views
5

非常に単純な例を試してみると、コンピュータが停止して再起動する必要があります。タスクマネージャをチェックすると、「python.exe」タスクの数百を示していますマルチプロセッシングモジュールを使用した単純なおもちゃの例でコンピュータがクラッシュする

import math 
from multiprocessing import Pool 

pool = Pool(processes=2) 
print pool.map(math.sqrt, [1,4,9,16]) 

私は、デュアルコアCPU(I5の2467メートル)を使用していますので、私は上記は大丈夫だろうと思いました。

processes=1を設定しようとしましたが、これは少し異なる問題が発生します。タスクは完了することはありませんが、コンピュータがフリーズすることはありません。

アイデア?

答えて

8

私はmultiprocessingで初めて遊んだときに同じ問題を抱えました。プール生成コードをif __name__ == '__main__'ブロックにラップします。何が起こっている

import math 
from multiprocessing import Pool 

if __name__ == '__main__': 
    pool = Pool(processes=2) 
    print pool.map(math.sqrt, [1,4,9,16]) 

は、サブプロセスが作成されたときに、あなたのモジュールはunpickle化され、無限再帰にプール生成コードを再実行していることです。 ifブロックの場合、生成コードはモジュールの親インスタンスでのみ実行されます。

+0

あなたはどのOSですか? – mgilson

+0

ありがとう。完全に修正しました(私は勝利7を使用しています)。 – iRoygbiv

+0

@mgilson私はWindows上にいる。 –

関連する問題