2017-05-13 1 views
4

이 질문은 중복 될 수 있습니다. 그러나이 주제에 관해 많은 내용을 읽었으며 제 사례와 일치하는 항목을 찾지 못했습니다. 또는 적어도 이해하지 못했습니다.파이썬 다중 처리 - dicts 목록을 풀로 전달

불편을 끼쳐 드려 죄송합니다.

내가하려고하는 것은 상당히 일반적이며, pool.starmap()에 kwargs 목록을 전달하여 다중 처리를 달성합니다.

가 여기 내 감소 사건 : 나는 Starmap 교육을 (가정

def compute(firstArg, **kwargs): # A function that does things 
    # Fancy computing stuff... 
    # Saving to disk... 
    return True 

if __name__ == '__main__': 
    args = [{ 
     'firstArg': "some data", 
     'otherArg': "some other data" 
     'andAnotherArg': x*2 
    } for x in range(42)] 

    pool = Pool(4) 
    pool.starmap(compute, args) 
    pool.close() 
    pool.terminate() 

)을 DICT의 포장을 풀고는()와 같은 키워드 인수를 계산하기 위해 통과하지만, source code 보는 것입니다 (참조 또한 l.46)을 키 (또는 값?) 만 보냅니다.

은 그래서 제기

TypeError: compute() takes 1 positional argument but 3 were given 

그것은이 작업을 수행하려면 명확하고 정직 방법이 있어야합니다 ... 어떤 도움을 주시면 감사하겠습니다.

여기 꽤 비슷한 질문 : Python Multiprocessing - How to pass kwargs to function?

답변

1
당신은 작은 프록시 기능을 사용할 수

:

pool.map(lambda Dict: compute(**Dict), args) 
: 네임 스페이스를 오염 proxy 기능을 필요로하지 않기 때문에,

def proxy(Dict): 
    return compute(**Dict) 

pool.map(proxy, args) 

또는

+1

좋아요! 그냥 람다에서 사용했는데, 완벽했습니다. 도움 주셔서 감사합니다. –

관련 문제