2017-08-29 13 views
1

multiprocessの質問はpython3.5にあります。python複数のリストを持つマルチプロセス

私は次のように2つのリストを持っている場合:

xlist = [1,2,3] 
ylist = [4,5,6] 

と私がやりたい:

for i in xlist: 
    for j in ylist: 
     print (i*j) 

出力は、私はマルチプロセスで、このようにそれを実行しよう

4 
5 
6 
8 
10 
12 
12 
15 
18 

です:

import multiprocessing 

global xlist 
xlist = [1,2,3] 
ylist = [4,5,6] 

def product(ylist): 
    for x in xlist: 
     for y in ylist: 
      print (x,y) 
    return 'OK' 

if __name__ == "__main__": 
    pool = multiprocessing.Pool() 
    results = [] 
    for i in range(0, len(ylist)): 
     result = pool.apply_async(job, args=(ylist,)) 
     results.append(result) 
     # print (result.get()) 
    pool.close() 
    pool.join() 

for result in results: 
    print(result.get()) 

しかし、上記の出力が得られません。出力は

1 4 
1 5 
1 6 
2 4 
2 5 
2 6 
3 4 
3 5 
3 6 
1 4 
1 5 
1 6 
2 4 
2 5 
2 6 
3 4 
3 5 
3 6 
1 4 
1 5 
... 

です。

目的を達成する方法はありますか(マルチプロセスを使用する必要がありますか)?

+0

どういう意味ですか? –

+0

@MadPhysicist大きなデータを処理したいので、計算を処理するためにマルチプロセスを使用する必要があります。しかし、私はどのように2つのリストを処理するためにマルチプロセッシングを使用するのか分かりません – chilun

+2

私は "私が望む結果が得られません。 SOの質問の赤旗です。それはあまりにも曖昧です –

答えて

1

私は非常に大きな数の数で、より複雑な関数を使用する前に、簡単な例を試してみたいと思います。

あなたが望むものを印刷し、マルチプロセッシングを使用し、大きなリストやより複雑な機能のためにスケーリングする必要のあるプログラムです。

import multiprocessing 

xlist=[1,2,3] 
ylist=[4,5,6] 

def enum_tasks(): 
    for x in xlist: 
    for y in ylist: 
     yield (x,y) 

def product(xy): 
    x,y = xy 
    return x * y 

if __name__ == '__main__': 
    CHUNK_SIZE = multiprocessing.cpu_count() 
    pool = multiprocessing.Pool() 
    for result in pool.imap(product, enum_tasks(), CHUNK_SIZE): 
    print result 
+0

助けてくれてありがとう!それが私の必要なものです。 – chilun

関連する問題