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

'for'ループ –

+0

を使用@PatrickHaugh "私はより効率的にこれを行うことができます**順次除く**それらを実行する" マイリスト'ので – DeepSpace

+0

[i]を.method(a、b)は '遅い、可能性forループを使用しない方が良いでしょうか? –

答えて

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

関連する問題