2016-03-25 49 views
0

マルチプロセスを使用して複数のプロセスを起動し、各プロセスがグローバルdictオブジェクトを更新しようとするときに問題が発生します。Python MultiProcessingグローバル変数の更新

コードである:私は道に沿って付加されているものを印刷するとき

import multiprocessing 

jobs = [] 

master_dict = {} 

def worker_function(list1, id): 
    master_dict[str(id)] = {} 

    for i in list1: 
     # 
     # using pymssql here to get a cursor of rows from a SELECT query 
     # 
     master_dict[str(id)][i] = [] 

     for row in cursor: 
      master_dict[str(id)][i].append(row) 

    return 

def multi_function(): 
    for i in list2: 
     my_proc = multiprocessing.Process(name='multi_process', target=worker_function, kwargs={'list1': session['something'], 'id': i}) 

     jobs.append(my_proc) 
     my_proc.start() 

    for job in jobs: 
     job.join() 
return master_dict{} 

、私はそれを返ししかしと、そのデータがmaster_dictするために添加されている参照を行う、それは} {単純です。

同じ変数を更新しようとしている複数のプロセスに問題がありますか?スレッドセーフであるため、複数のスレッドでこれが問題になることがわかりました。

非常に参考になる候補があります。

ありがとうございました

答えて

3

このようなプロセス間で状態を共有することはできません。 multiprocessingモジュールにはこれを行うためのnumber of different approachesが含まれています。

関連する問題