0

Python マルチプロセッシングを使用するプログラムがあります。メインプログラムで作成されたすべてのプロセスを終了できることがわかりましたが、メインプログラムは常に戻り値を待っていて停止できません。この問題を解決する方法について誰か提案してもらえますか?

コード スニペットは次のとおりです。

メインプログラム:

workers = multiprocessing.Pool(4)
args = [arg1, arg2, arg3, arg4]
results = workers.map(subfunc, args)
print "we are in main functions "

subfunc(*引数)

# doing some other jobs
result = {.....} # a large dictionary
print 'done with sub functions'
return result # if I change it to  "return 1", it can finish successfully

メインで作成されたすべてのプロセスの「サブ関数で完了」という出力が表示されますが、「メイン関数にいる」という出力はありません。誰でも私が問題を理解するのを手伝ってくれますか?

4

1 に答える 1

2

結果を返した後subfunc、子プロセスは結果を取得し、プロセス間通信を介してマスター プロセスに送信する必要があります。そのため、サブプロセスが実際に終了する準備が整う前に、「完了」と出力しています。

それが問題であることを確認するために戻っ"fake"てみて、プロセス間で結果をより迅速に伝達する方法を考えることができます。たとえば、リストの内容によっては、内容をより厳密な形式にパッケージ化できる場合や、共有メモリが実行可能なオプションになる場合があります。

于 2012-04-06T19:46:59.453 に答える