2017-11-30 7 views
0

인스턴스 목록의 메서드를 실행하려고했지만 순차적으로 실행하는 것 외에는 방법을 알지 못합니다. 내가 mylist[i].method(a,b)을하고 싶은 목록 mylist인스턴스 목록의 메서드 실행

class myclass(object): 
    def __init__(xxx): 
     ... 
    def method(a, b): 
     do something using a and b, 
     a and b will not be modified, 
     also no return value. 

각각의 예를 들어 :

나는 동일한 개체의 인스턴스의 목록을 가지고있다.

순차적으로 실행하는 경우를 제외하고는이 작업을보다 효율적으로 수행 할 수 있습니까? ab은 전역이 아니지만 전달되어야한다는 것을 유의하십시오.

+0

은 myList에'이후 –

+0

@PatrickHaugh [I]는 .method, 수있는'for' 루프를 사용하여 for 루프를 사용하지 않는 것이 더 좋을까요? – DeepSpace

+0

를 "나는이보다 효율적으로 **를 제외하고 순차적으로 **를 실행 할 수 없습니다"(A, B)'느린 –

답변

0

가장 쉬운 방법은 ThreadPool.map의 사용을 허용하는 래퍼 함수를 ​​만드는 것입니다.

ab은 수정되지 않는다고 언급 했으므로이 변수를 "전역 범위"변수로 사용했습니다. 그렇지 않은 경우 실행 된 함수에 임의의 인수를 전달할 수있는 .apply을 사용하여 각 스레드로 전달할 다른 방법을 찾아야합니다.

from multiprocessing.pool import ThreadPool 

a, b = 1, 2 

class A: 
    def method(self, a, b): 
     print(a, b) 

def wrapper(a_object): 
    a_object.method(a, b) 

objects = [A() for _ in range(5)] 

pool = ThreadPool() # with no arguments this will create N threads, 
        # N being the number of CPUs that Python detects. 
pool.map(wrapper, objects) 
# 1 2 
# 1 2 
# 1 2 
# 1 2 
# 1 2 
+0

감사합니다. 이것은 문제를 해결할 수 있습니다! –

+0

다중 CPU를 활용할 수 있습니까? 아니면 다중 CPU를 활용할 수 있습니까? –

+0

@fdafdsjflasdjlfas 예. 코드에서 작성한 주석을보고 설명서를 읽을 수도 있습니다. – DeepSpace