5

次の非常に単純な例を試してみると、コンピューターが停止するため、再起動する必要があります。タスク マネージャーを確認すると、何百もの "python.exe" タスクが表示されます。

import math
from multiprocessing import Pool

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

私はデュアルコアCPU(i5 2467m)を使用しているので、上記で問題ないと思いました。

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

何か案は?

4

1 に答える 1

8

初めて遊んだときも同じ問題がありましたmultiprocessingif __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と、生成コードはモジュールの親インスタンスでのみ実行されます。

于 2012-12-18T14:41:18.533 に答える