2017-11-27 19 views
1

私はPythonでマルチスレッド化する方法、つまりマップ関数を使って複数の変数で関数を呼び出す方法を理解しようとしています。複数の変数のマルチスレッド化とマッピング

マイコード:私はかなり得ることはありません

TypeError: '<=' not supported between instances of 'list' and 'int' 

from multiprocessing.dummy import Pool as ThreadPool 
def myFunc(a, b): 
    print(a * b) 

arr = [4, 8, 10, 7, 9] 
arr2 = [2, 1, 3, 4, 2] 

pool = ThreadPool(4) 

results = pool.map(myFunc, arr, arr2) 

pool.close() 
pool.join() 

それはpool.map関数呼び出しから次のエラーを取得します。 documentationから私はこれを行うことができるはずです。

私には何が欠けていますか?

+0

あなたはPythonのマルチスレッドを勉強すれば(自分のAPIは非常に似ていますが)、Pythonが*マルチスレッド*と*マルチプロセス・*のための異なるメカニズムを持っていることに注意する方が良いようです – dkato

答えて

0

ここは例です。組み込みのmapは2つ以上のイテレータを取ることができますが、pool.mapの場合、2つ目の引数として1つのイテレータしか取ることができません。

from multiprocessing import Pool 

def myFunc(x): 
    print(x[0] * x[1]) 

arr = [4, 8, 10, 7, 9] 
arr2 =[2, 1, 3, 4, 2] 

if __name__ == '__main__': 

    pool = Pool(4) 
    results = pool.map(myFunc, zip(arr, arr2)) 

    pool.close() 
    pool.join() 

詳しくは以下を比較してください。

https://docs.python.org/3.6/library/multiprocessing.html#multiprocessing.pool.Pool.map https://docs.python.org/3/library/functions.html#map

関連する問題