2

mutltiprocessingパッケージを使用して、関数内で複数の CPU を使用しようとしています。関数の外でおもちゃの例を実行すると、問題なく 1/4 秒で実行されます (以下を参照)。

from multiprocessing import Pool
import time

start = time.clock()

def f(x):
    return x*x

if __name__ == '__main__':
    with Pool(processes=7) as pool:     
        result = pool.map(f, range(1000))



print(time.clock() - start)

ただし、同じコードを関数に適用すると (以下を参照)、そのことTrueを示すために出力されますが__name__ == '__main__'、その後は永久に実行され、結果を返すことはありません。Windows 7 で Python 3.3 を実行しています。

from multiprocessing import Pool
import time

start = time.clock()

def f(x):
    return x*x

def testfunc(r):
    if __name__ == '__main__':
        print(True)
        with Pool(processes=7) as pool:     
            result = pool.map(f, range(r))

    return result

result = testfunc(1000)
print(time.clock() - start)
4

1 に答える 1

5

if __name__ == '__main__'間違った場所で使用しています。

from multiprocessing import Pool
import time

start = time.clock()

def f(x):
    return x*x

def testfunc(r):
    print(True)
    with Pool(processes=7) as pool:     
        result = pool.map(f, range(r))
    return result

if __name__ == '__main__':
    result = testfunc(1000)
    print(time.clock() - start)

によるとmultiprocessing - Programming guidelines

メインモジュールの安全なインポート

意図しない副作用 (新しいプロセスの開始など) を引き起こすことなく、メイン モジュールが新しい Python インタープリターによって安全にインポートできることを確認してください。

... 次のように if __name__ == '__main__': を使用して、プログラムの「エントリ ポイント」を保護する必要があります。

于 2013-09-25T17:36:57.567 に答える