私はPythonのドキュメントに正しく従っていると思いますが、私が探している結果を得るのに問題があります。私は基本的に数字のリストを持っており、それはネストされたforループの関数に渡され、出力は辞書に保存されます。ここでマルチプロセッシングで共有辞書にアクセスするにはどうすればよいですか?
コードです:私が間違ってやっているの
{1: 9801, 2: 9801, 3: 9801, 10: 9801}
任意の提案:
from multiprocessing import Pool, Manager
list = [1,2,3,10]
dictionary = {}
def test(x, dictionary):
for xx in range(100):
for xxx in range(100):
dictionary[x]=xx*xxx
if __name__ == '__main__':
pool = Pool(processes=4)
mgr = Manager()
d = mgr.dict()
for N in list:
pool.apply_async(test, (N, d))
# Mark pool as closed -- no more tasks can be added.
pool.close()
# Wait for tasks to exit
pool.join()
# Output results
print d
ここで期待される結果はですか?また、私は共有リソースが最良のアプローチ(状態を維持するためにデータベースを使用することを考えている)であると確信していないので、私のアプローチに完全に欠陥がある場合や、Pythonでこれを行うより良い方法がある場合はお知らせください。
ありがとう、私はこのような単純な間違いをしたとは信じられません。ありがとう。一般的なアプローチとして。私の実際のコードは、基本的に既存のdictアイテムを参照する必要があり、それを作成するために存在しない場合(および新しいループ内でそれを処理するために存在する場合)それを一括して処理することは、具体的には機能しませんが、そのアプローチについて知っておくとよいでしょう。私はデータベースについて考えていた(または結果をファイルに保存していた)が、わからなかった。 – Lostsoul