異なるスレッドからグローバルdictにアクセスしようとしています。完全な例は以下の通りです:グローバルオブジェクトをPythonスレッド/プロセスから更新する
results = {0: 'pass'}
def checkResult(thread_num, result_map):
while(True):
results[thread_num] = 'fail'
print('Thread results : '+str(results))
time.sleep(5)
multiprocessing.Process(target = checkResult, args=(1, results)).start()
multiprocessing.Process(target = checkResult, args=(2, results)).start()
while(True):
print('Main results: '+str(results))
time.sleep(3)
「主な結果」だけのスレッド0を見て、「スレッドの結果が」唯一、自分のスレッドの結果ごとに辞書を変更します。
Thread results : {0: 'pass', 1: 'fail'}
Main results: {0: 'pass'}
Thread results : {0: 'pass', 2: 'fail'}
Main results: {0: 'pass'}
Thread results : {0: 'pass', 1: 'fail'}
Thread results : {0: 'pass', 2: 'fail'}
Main results: {0: 'pass'}
^C
それはと思われます「結果」マップは参照渡しではなく値渡しされています。各スレッドが独自のコピーを使用する代わりに、スレッドが元のグローバルマップを参照する方法はありますか?
私は、あるスレッドが別のスレッドの変更を上書きする問題を避けるためにロックを使用するべきであることを知っています(実際の解決策ではそうする予定です)。現時点では、私はすべてのスレッドを共通の結果辞書で処理しようとしています。
:このような
何かがトリックを行う必要があります。 – syntonym
[これを確認する](http://stackoverflow.com/questions/10797998/is-it-possible-to-multiprocess-a-function-that-returns-something-in-python)答え、結果を渡す方法を説明していますサブプロセスから戻る。 – FujiApple