multiprocessing.pool.map_async不运行我的函数

时间:2017-01-04 13:18:13

标签: python parallel-processing python-multiprocessing

我正在尝试同时在多个核心上运行相同的进程池。这是我的代码的简化版本。 好像我的函数永远不会被map_async调用,而且代码会被卡住(在print (4)之后)。 有什么想法吗?

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)

2 个答案:

答案 0 :(得分:0)

pairs成为printPairs的参数:

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

答案 1 :(得分: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)