0

(これは Python 2.7 を使用しています)

同様のリンクを見つけましたが、私が抱えている問題とまったく同じ問題についてではありません。このプログラムは map_async でハングアップし、終了しません。Python プロセスが作成されているのがわかりますが、完了しません。

import multiprocessing


def main():
    PROCESSES = 4
    print 'Creating pool with %d processes\n' % PROCESSES
    pool = multiprocessing.Pool(PROCESSES)
    r = pool.map_async(pow3, range(10))
    r.wait()


def pow3(x):
    try:
        return x**3
    except:
        print('%s: %s' % (x, traceback.format_exc()))

if __name__ == '__main__':
    main()
4

1 に答える 1

2

それは正常に動作します。
これを対話型インタープリターで実行していますか? ドキュメント
からこのメモを参照してください:

注 このパッケージ内の機能では、メイン モジュールが子によってインポート可能である必要があります。これはプログラミング ガイドラインで説明されていますが、ここで指摘する価値があります。これは、 multiprocessing.Pool の例など、一部の例が対話型インタープリターでは機能しないことを意味します。例えば:

>>> from multiprocessing import Pool   
>>> p = Pool(5)   

>>> def f(x):   
...     return x*x  

>>> p.map(f, [1,2,3])  

プロセス PoolWorker-1:
プロセス PoolWorker-2:
プロセス PoolWorker-3:

トレースバック (最新の呼び出しが最後):

AttributeError: 'module' オブジェクトに属性 'f' がありません
AttributeError: 'module' オブジェクトに属性 'f' がありません
AttributeError: 'module' オブジェクトに属性 'f' がありません

(これを試すと、実際には半ランダムな方法でインターリーブされた 3 つの完全なトレースバックが出力されるため、マスター プロセスを何らかの方法で停止する必要がある場合があります。)

于 2013-06-10T09:42:55.007 に答える