6
나는 파이썬 문서를 올바르게 따르고 있다고 생각하지만 내가 찾고있는 결과를 얻는데 어려움을 겪고있다. 나는 기본적으로 숫자의 목록을 가지고 있으며, 이는 중첩 된 for 루프의 함수로 전달되며 출력은 사전에 저장됩니다. 내가 잘못 무엇다중 처리로 공유 사전에 어떻게 액세스합니까?
{1: 9801, 2: 9801, 3: 9801, 10: 9801}
어떤 제안 :
여기from multiprocessing import Pool, Manager
list = [1,2,3,10]
dictionary = {}
def test(x, dictionary):
for xx in range(100):
for xxx in range(100):
dictionary[x]=xx*xxx
if __name__ == '__main__':
pool = Pool(processes=4)
mgr = Manager()
d = mgr.dict()
for N in list:
pool.apply_async(test, (N, d))
# Mark pool as closed -- no more tasks can be added.
pool.close()
# Wait for tasks to exit
pool.join()
# Output results
print d
가 예상 결과입니다 : 여기
코드인가? 또한, 공유 된 리소스가 최상의 접근 방식 (데이터베이스를 상태를 유지하기 위해 생각하는 것)이라고 확신하지 못했습니다. 따라서 내 접근 방식에 결함이 있거나 파이썬에서이 작업을 수행하는 더 좋은 방법이 있다면 알려 주시기 바랍니다.
감사합니다. 나는 그렇게 간단한 실수를했다고 생각하지 않습니다. 감사. 일반적인 접근법에 관해서. 내 실제 코드는 기본적으로 기존의 dict 항목을 참조해야하며, 작성해야 할 항목이없는 경우 (그리고 새 루프 내에서 처리하기 위해 존재하는 경우) 필요합니다. 일괄 처리는 나를 위해 특별히 작동하지 않을 것이지만 그 접근법에 대해 알면 좋습니다. 데이터베이스 (또는 파일에 결과 저장)에 대해 생각하고 있었지만 확실하지 않았습니다. – Lostsoul