无法使用 pool.apply_async()

Not able to use pool.apply_async()

我只是在使用 Python 的多处理模块,但是 下面的代码是 运行 连续但没有给出任何输出。我究竟做错了什么?我也试过 pool.close()pool.join() 但没有效果。

这是我目前尝试过的方法:

import multiprocessing as mp
cpu_count = mp.cpu_count()
pool = mp.Pool(processes = cpu_count)

def func(val):
    print "\nInside Function.....\n"
    return val*val

results = []
num = 1
while cpu_count >= 1:
    results.append(pool.apply_async(func, (num,)))
    cpu_count = cpu_count - 1
    num = num + 1

output = [p.get() for p in results]
print output

包装你的代码
if __name__ == '__main__':
    ...

由于多处理实现,如果您在 windows 下工作,则有必要。

以下代码按您的预期打印 [1, 4, 9, 16]:

import multiprocessing as mp

def func(val):
    print "\nInside Function.....\n"
    return val*val

if __name__ == '__main__':
    cpu_count = mp.cpu_count()
    pool = mp.Pool(processes = cpu_count)

    results = []
    num = 1
    while cpu_count >= 1:
        results.append(pool.apply_async(func, (num,)))
        cpu_count = cpu_count - 1
        num = num + 1

    output = [p.get() for p in results]
    print output

    pool.close()
    pool.join()

注意池在程序退出前关闭 - 只是终止程序并不能保证池关闭,它的进程可以保留 运行。