1

managers.dict()managers.dict() 프로세스 전체에서 사전을 공유하고 스레드 안전 작동을 수행 할 수 있습니다. 필자의 경우 각 코디네이터 프로세스는 하나의 dict 키로 읽고 쓰는 m 요소와 n 작업자 프로세스로 공유 dict를 작성합니다.python manager.dict() 잠금 작동 방법 :

managers.dict()에는 dict에 대한 단일 잠금 또는 m 잠금 (모든 키에 하나씩)이 있습니까?

m 요소를 n 명의 근로자에게 공유 할 수있는 대안이 있습니까? 예 : 근로자가 서로 의사 소통 할 필요가없는 경우? 내가 매니저 DICT 당 하나의 잠금이 말할 수있는 몇 가지 시도 후 python-manager-dict-is-very-slow-compared-to-regular-dict

답변

1

관련

. 여기 증명 코드이다

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() 

출력 : 쓰기

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 

증가 시간이 일어나고 대기를 나타낸다.