1

managers.dict()managers.dict()は、プロセス全体で辞書を共有し、スレッドセーフな操作を実行できます。 私の場合、コーディネーター・プロセスはそれぞれ、m要素とnワーカー・プロセス(単一のdictキーとの間で読み書き)の共有ディクティクトを作成します。python manager.dict()のロックの仕組み:

managers.dict()には、dictのロックが1つ、またはmのロックが1つあります。

mの要素を、共有ディクテーション以外の従業員にnのワーカーに共有する別の方法がありますか?ワーカーは互いに通信する必要はありません。私は経営者の辞書ごとに1つだけのロックがあると言うことができるいくつかの試行後python-manager-dict-is-very-slow-compared-to-regular-dict

答えて

1

関連

。執筆のための時間の増加が起こっている待機を示し

Writing 4... 
Writing 3... 
Writing 1... 
Writing 2... 
Writing 0... 
released 4 in 3542.7968502ms 
released 0 in 4416.22900963ms 
released 1 in 6247.48706818ms 
released 2 in 7926.97191238ms 
released 3 in 9973.71196747ms 

Process finished with exit code 0 

:出力

import time 
import multiprocessing as mp 


def process_f(key, shared_dict): 
     values = [i for i in range(64 * 1024 * 1024)] 
     print "Writing {}...".format(key) 
     a = time.time() 
     shared_dict[key] = values 
     b = time.time() 
     print "released {} in {}ms".format(key, (b-a)*1000) 


def main(): 
    process_manager = mp.Manager() 
    n = 5 
    keys = [i for i in range(n)] 
    shared_dict = process_manager.dict({i: i * i for i in keys}) 

    pool = mp.Pool(processes=n) 

    for i in range(n): 
     pool.apply_async(process_f, (keys[i], shared_dict)) 
    time.sleep(20) 


if __name__ == '__main__': 
    main() 

:ここ はそれを証明しているコードです。