-2

이 기본 코드이다.로서는 주석값은 관리자에 저장되지 않은 경우() 풀 (내부 딕셔너리())

for x in mylist: 
    r = {} 
    r['m'] = 1 
    r['n'] = 2 
    print (r) # gives correct values 
    mydict[x].append(dict(r)) 
    print (mydict) # gives empty list, keys are printed correct 

:

if __name__ == '__main__': 
    manager = Manager() 
    mylist = manager.list() 
    mydict = manager.dict() 

    mylist.append('abc') 
    mylist.append('xyz') 

    for k in mylist: 
     mydict[k] = manager.list() 

    pool = Pool(processes = 100) 
    pool.map(func, arg) 
    pool.terminate() 

이이 FUNC() 정의이다 코드에서 예상 값 대신 빈 목록을 인쇄합니다. 어떻게이 공유 된 dict 및 목록을 제대로 작동하게합니까?

첫 번째 인쇄가 예상 값을 나타내고 있습니다. 두 번째 인쇄에는 예상 된 키가 표시되지만 값 부분은 빈 목록입니다. 키가 올바르게 표시되므로 공유가 작동하고 있습니다. 추가 부분에 문제가 있습니다. 나는 그것을 알아낼 수 없다.

유권자는 내 질문과 동일하다고 생각하기 전에 링크 된 질문을주의 깊게 읽으십시오. 여전히 동일하다고 주장한다면, 왜 그렇게 생각하는지에 대한 의견을 남겨주세요. 내 견해로는 두 가지 질문이 다릅니다. 연결된 질문은 Manager.dict()의 사용을 제안하는 답변과 사전을 공유하는 방법에 대해 묻습니다. 제 질문은 이미 Manager.dict()를 사용하고 있으며 예외로 인해 실패하고 있습니다. 고맙습니다.

+0

모든 관리자 인스턴스에서 "mylist"를 공유하고 싶습니까? –

+0

당신의 질문을 편집하고'func (???')의 함수 헤더를 보여 주시오 아니면'mylist'를 전역으로 사용 하시겠습니까? – stovfl

+0

@pdshah mydict 인스턴스 하나와 mylist 인스턴스 하나만있는 것으로되어 있습니다 전체 프로그램입니다 .Mydict 내부의 모든 데이터는 myfunc()에서 볼 수 있어야하며 수정할 수 있어야합니다. "모든 관리자 인스턴스"가 의미하는 바를 이해하지 못합니다. 수영장 내부에 인스턴스를 더 많이 만들고 있습니까? – aste123

답변

0

코드의 주석에서 알 수 있듯이 mydictfunc() 안에 올바르게 읽히지 만 돌연변이를 일으키지 않습니다. Manger.dict() 객체는 중첩 된 부분을 변경할 수 없습니다.

새 사전을 만들고 돌연변이 후 mydict을 지정하여 수정할 수 있습니다.

for x in mylist: 
    r = {} 
    r['m'] = 1 
    r['n'] = 2 
    print (r) 
    foo = mydict[x] 
    foo.append(dict(r)) 
    mydict[x] = foo 
    print (mydict)