2016-11-04 2 views
0

장치 목록이 있는데, 테스트 베드에 따라 달라질 수 있습니다. 여기에 4 개의 노드가 있습니다 :알 수없는 목록 항목을 사용할 수 있으며 동시에 모든 항목을 사용하는 함수를 작성할 수 있습니까?

node_list = [R1,R2,R3,R4] 

함수에서 동시에 4 개의 값을 사용하도록 파이썬 코드를 작성할 수 있습니까?

현재 나는 테스트 베드에 고정 만드는 중이라서 :

pcall([run_command],iargs=[R1,R2,R3,R4]) 

허용 :

R1 = node_list[0] 
R2 = node_list[1] 
R3 = node_list[2] 
R4 = node_list[3] 

우리는 PCALL 기능이 동시 calls.Let 년대 내가 전화하고 기능이 run_command(rtr)라고 실행을 정의해야 네 개의 노드 모두 run_command 함수를 동시에 호출합니다. 그러나 그것은 4 노드로 수정되었습니다.

+1

을하지 당신이 무슨 뜻인지,하지만 당신은 오지 않았다 'map (run_command, node_list)'에 걸쳐? –

+0

@ Dr.V 부작용을 유도하기 위해'map '을 사용하는 것을 권할 것입니다. for-loop를 사용하면됩니다. –

+0

@ Dr.V :'map()'은 병행하지 않습니다. 대신에,'multuprocessing.Pool.map()'은 함수 호출을 동시 호출로 만듭니다. –

답변

0

multuprocessing.Pool.map()이 필요합니다. 문서의 세부 사항 :

map() 내장 함수 (이는 iterable 인자를 하나만 지원합니다)와 동일한 의미입니다. 결과가 준비 될 때까지 차단됩니다.

이 메서드는 iterable을 여러 청크로 잘라서 별도의 작업으로 프로세스 풀에 전송합니다. 이러한 청크의 (대략적인) 크기는 chunkksize를 양의 정수로 설정하여 지정할 수 있습니다.

샘플 예 :

from multiprocessing import Pool 

def f(x): 
    return x*x 

p = Pool(5) 
print(p.map(f, [1, 2, 3])) 

이 표준 출력에 인쇄됩니다 : 또한

[1, 4, 9] 

에 대한 확인 : multuprocessing.Pool.imap()multuprocessing.Pool.map_async()

+0

함수 f에 제공 한 입력리스트는 그 위치에 동적리스트를 가질 수 있습니다. 제 말은 여러분이 [1,2,3]을 먹고 있다는 것을 의미합니다. 이전 함수의 출력에 의존하는 목록을 가질 수 있습니까? 내 a() 리턴리스트 [10,24,1]는 수동으로 값을 변경하지 않고 f (x)에서 이것을 피드 할 수 있다고합니다. –

+0

파이썬 관련 기본 튜토리얼을 살펴보고 객체가 어떻게 작동하는지 연습 해 보도록하겠습니다. 나는 거기에 목록 개체를 전달하고 그것은 모든 소스를 통해 수 있습니다. 간단히 말해, 네가 그것을 사용할 수 있습니다. '[1, 2, 3]'대신'a()'를 써라. –

관련 문제