2017-01-04 9 views
0

同じプロセスのプールを複数のコアで同時に実行しようとしています。これは私のコードを単純化したものです。 私の関数がmap_asyncによって呼び出されることはないようですが、コードがスタックしてしまいます(print (4)の直後)。 multiprocessing.pool.map_asyncが私の機能を実行していません

import multiprocessing 
pairs = [['a','b'],['c','d'],['e','f'],['g','h']] 

def printPairs(first, second): 
    print('pairs =', pairs) 

def parallel(function, pairs): 
    cpu_no = multiprocessing.cpu_count() 
    if len(pairs) < cpu_no: 
     cpu_no = len(pairs) 

    p = multiprocessing.Pool(cpu_no) 
    p.map_async(function, pairs, chunksize=1) 
    print('3, p = ', p) 
    p.close() 
    print('4') 
    p.join() 
    print('5')  
    return 

parallel(printPairs, pairs) 

答えて

0

printPairspairs引数ください:

import multiprocessing 


def printPairs(pairs): 
    print('pairs =', pairs) 

def parallel(function, pairs): 
    cpu_no = multiprocessing.cpu_count() 
    if len(pairs) < cpu_no: 
     cpu_no = len(pairs) 

    p = multiprocessing.Pool(cpu_no) 
    p.map_async(function, pairs, chunksize=1) 
    print('3, p = ', p) 
    p.close() 
    print('4') 
    p.join() 
    print('5') 
    return 

pairs = [['a','b'],['c','d'],['e','f'],['g','h']] 
parallel(printPairs, pairs) 

とそれが動作します。

出力:

3, p = <multiprocessing.pool.Pool object at 0x10169d0f0> 
4 
pairs = ['c', 'd'] 
pairs = ['a', 'b'] 
pairs = ['e', 'f'] 
pairs = ['g', 'h'] 
5 
+0

私はそれも試しました。これはまだ私のコンピュータで実行されないので、これは本当に奇妙です。それは正確に同じポイントに固執する。 – Yair

+0

PythonのバージョンとOSは何ですか? –

+0

Windows 10でPython 3.5.1(Anaconda 4.0.0を使用)。 – Yair

0

私はあなたがそれらを必要としない場合でも、Windows上で使用すると、関数の結果を得るために必要と思われます。それは必要でないとしても良い考えのようです。

import multiprocessing 
pairs = [['a','b'],['c','d'],['e','f'],['g','h']] 

def printPairs(pair): 
    print('pair =', pair) 

def parallel(function, pairs): 
    cpu_no = multiprocessing.cpu_count() 
    if len(pairs) < cpu_no: 
     cpu_no = len(pairs) 

    p = multiprocessing.Pool(cpu_no) 
    res = p.map_async(function, pairs, chunksize=1) 
    print('3, p = ', p) 
    print(res.get()) 
    print('4') 
    p.close() 
    print('5') 
    p.join() 
    print('6') 
    return 

if __name__ == '__main__': 
    parallel(printPairs, pairs) 
関連する問題