2017-09-25 16 views
0

저는 여전히 파이썬을 배우고 있습니다. 나에게,이 코드는 정확히 어떻게 '풀 매핑'을 보여주는에 대해 완전히 명확하지 않다 https://docs.python.org에서 작동합니다 : 그것의 분리에 별도로 목록 [1, 22, 333]의 각 인덱스를 연결 ...파이썬 다중 처리 pool.map 설명

from multiprocessing import Pool 

def f(x): 
    return x*x 

if __name__ == '__main__': 
    numb_list = [1, 22, 333] 
    with Pool(5) as p: 
     print(p.map(f, numb_list)) 

그래서 동일한 기능의 프로세스가 모두 다른 코어에서 실행되고 있습니까? 그렇다면 특정 반복에 대한 세부 정보를 어떻게 확인할 수 있습니까? 나는 풀 기능을 실행하는 각 프로세스에 한 번에 전체 목록을 삽입합니까 [1, 22 (333)] 목록에

def f(x): 
    if len(x) >= 3: 
     print("Big input") 
    return x*x 

을 특정 요소의 길이를 알고 싶어하기 때문에이 기능을 편집 예 경우 또는 목록의 일부? 이 방법으로 요소 입력의 길이를 확인할 수 있습니까? 지도 대신 for 루프를 사용하여 현재 반복 또는 요소를 구분할 수있는 방법이 있습니까?

from multiprocessing import Process 

results = [] 
for item in numb_list: 
    process = Process(target=f, args=(item,)) 
    process.start() 
    # insert process result in to results 

map이 반복 가능한 매개 변수를 풀고 각 프로세스에 각 항목을 보내드립니다 :

+0

맞습니다. 각 요소를 별도의 프로세스로 나누어 전달합니다. –

+0

오케이. 그래서 나는 함수 내에서 현재 프로세스의 목록에서 단일 요소 여야하는 x 길이를 확인할 수있을 것이라고 추측합니다. 많은 사람들이 병렬 프로그램을 잘 코딩하지 못합니까? –

+0

예, 맞습니다. –

답변

0

그것은 거의에 같습니다.